معنى - git bash




معالجة جميع الوسائط باستثناء أول واحد(في برنامج نصي bash) (2)

إذا كنت ترغب في حل يعمل أيضًا في /bin/sh

first_arg="$1"
shift
echo First argument: "$first_arg"
echo Remaining arguments: "[email protected]"

shift [n] يغير المعلمات الموضعية n مرة. يؤدي shift إلى تعيين قيمة $1 إلى قيمة $2 ، وقيمة $2 إلى قيمة $3 ، وما إلى ذلك ، مما يؤدي إلى تقليل قيمة $# واحدة.

لدي برنامج نصي بسيط حيث يتم حجز الوسيطة الأولى لاسم الملف ، ويجب تمرير جميع الحجج الاختيارية الأخرى إلى أجزاء أخرى من النص البرمجي.

باستخدام Google وجدت هذا الويكي ، لكنه قدم مثالًا حرفيًا:

echo "${@: -1}"

لا يمكنني الحصول على أي شيء آخر للعمل ، مثل:

echo "${@:2}"

أو

echo "${@:2,1}"

أحصل على "استبدال سيئة" من المحطة.

ما هي المشكلة ، وكيف يمكنني معالجة كل الحجة باستثناء الأولى التي تم تمريرها إلى البرنامج النصي bash؟


استخدم هذا:

echo "${@:2}"

بناء الجملة التالي:

echo "${*:2}"

ستعمل كذلك ، ولكن لا يوصى بها ، لأن @Gordon أوضح بالفعل ، أنه باستخدام * ، فإنه يدير كل الحجج معًا كحجة واحدة مع مسافات ، بينما @ يحافظ على الفواصل بينهما (حتى إذا كانت بعض الحجج نفسها تحتوي على مسافات). لا يصنع الفرق مع echo ، لكنه مهم بالنسبة للعديد من الأوامر الأخرى.





shell