linux - شرح - shell scripting pdf




ماذا يعني $ @ في نص shell؟ (4)

ماذا تعني علامة الدولار متبوعة بعلامة (at) (علامة) @ في نص شيل؟

فمثلا:

umbrella_corp_options [email protected]

إن استخدام [email protected] نقي يعني في معظم الحالات "يضر المبرمج بأقصى ما تستطيع" ، لأنه في معظم الحالات يؤدي إلى مشاكل في فصل الكلمات ومع مسافات وأحرف أخرى في الوسائط.

في (تخمّن) 99٪ من جميع الحالات ، يُطلب تضمينها في " : "[email protected]" ما يمكن استخدامه للتكرار بشكل موثوق عبر الحجج.

for a in "[email protected]"; do something_with "$a"; done

هذه هي وسائط سطر الأوامر حيث:

[email protected] = يخزن كل الوسيطات في قائمة السلسلة
$* = يخزن كل الوسيطات كسلسلة مفردة
$# = يخزن عدد الوسيطات


[email protected] هو كل المعلمات التي تم تمريرها إلى البرنامج النصي.

على سبيل المثال ، إذا ./someScript.sh foo bar برقم ./someScript.sh foo bar فسيكون [email protected] مساويًا foo bar .

اذا فعلت:

./someScript.sh foo bar

ثم من داخل مرجع someScript.sh :

umbrella_corp_options "[email protected]"

سيتم تمرير هذا إلى umbrella_corp_options مع كل معلمة فردية محاطة بعلامات اقتباس مزدوجة ، مما يسمح باتخاذ المعلمات ذات المساحة الفارغة من المتصل وتمريرها.


[email protected] هو نفسه تقريبًا مثل $* ، كلاهما يعني "جميع وسيطات سطر الأوامر". وغالبا ما تستخدم لمجرد تمرير جميع الحجج إلى برنامج آخر (وبالتالي تشكيل المجمع حول هذا البرنامج الآخر).

يظهر الفرق بين جملتي التجميع عندما يكون لديك وسيطة بمسافات فيه (على سبيل المثال) وتوضع [email protected] في علامات اقتباس مزدوجة:

wrappedProgram "[email protected]"
# ^^^ this is correct and will hand over all arguments in the way
#     we received them, i. e. as several arguments, each of them
#     containing all the spaces and other uglinesses they have.
wrappedProgram "$*"
# ^^^ this will hand over exactly one argument, containing all
#     original arguments, separated by single spaces.
wrappedProgram $*
# ^^^ this will join all arguments by single spaces as well and
#     will then split the string as the shell does on the command
#     line, thus it will split an argument containing spaces into
#     several arguments.

مثال: الاتصال

wrapper "one two    three" four five "six seven"

سوف يؤدي إلى:

"[email protected]": wrappedProgram "one two    three" four five "six seven"
"$*": wrappedProgram "one two    three four five six seven"
                             ^^^^ These spaces are part of the first
                                  argument and are not changed.
$*:   wrappedProgram one two three four five six seven




sh