كيفية تمرير جميع الحجج التي تم تمريرها إلى البرنامج النصي bash الخاص بي إلى وظيفة من الألغام؟




function parameter-passing (4)

لنفترض أنني قمت بتعريف function abc() التي ستعالج جميع المنطق المتعلق بتحليل الحجج التي تم تمريرها إلى البرنامج النصي الخاص بي.

كيف يمكنني تمرير كل الحجج التي استلمها البرنامج النصي الخاص بي؟ عدد المعلمات متغير ، لذا لا يمكنني فقط ترميز الحجج التي تم تمريرها كما يلي:

abc $1 $2 $3 $4

تحرير . والأفضل من ذلك ، هل هناك أي طريقة تسمح لي وظيفتي بالوصول إلى متغيرات وسيطات البرنامج النصي؟


Pet peeve: عند استخدام [email protected] ، يجب عليك (تقريبًا) وضعه دائمًا في علامات اقتباس مزدوجة لتجنب التكرار غير الصحيح للوسيطة باستخدام مسافات فيها:

abc "[email protected]"

إليك نص بسيط:

#!/bin/sh

args=("[email protected]")

echo Number of arguments: $#
echo 1st argument: ${args[0]}
echo 2nd argument: ${args[1]}

$# هو عدد الوسيطات التي يتلقاها البرنامج النصي. أجد سهولة في الوصول إليها باستخدام مصفوفة: يضع سطر args=("[email protected]") جميع الوسيطات في صفيف args . للوصول إليها ، استخدم ${args[index]} .



تجدر الإشارة إلى أنه يمكنك تحديد نطاقات حجة باستخدام هذا النحو.

function example() {
    echo "line1 ${@:1:1}"; #First argument
    echo "line2 ${@:2:1}"; #Second argument
    echo "line3 ${@:3}"; #Third argument onwards
}

لم أكن قد رأيت ذلك.





parameter-passing