اقتباس المحارف في Bash
فائدة اقتباس المحارف
تحمل كثيرًا من المحارف والكلمات معاني ووظائف خاصة بشكل أو بآخر، ويُستخدم الاقتباس لإلغاء ذلك المعنى أو الوظيفة الخاصة، إذ تعطِّل علامات التنصيص في Bash تلك المعاملة التي يلقاها المحرف الخاص، وتمنع معاملة الكلمات الخاصة وفقًا للمعاني التي تحملها، وكذلك تعطِّل توسع المعامِلات.
محارف الهروب
تُستخدم محارف الهروب لإلغاء المعنى الخاص لمحرف واحد، وتُستخدم الشرطة المائلة الخلفية \
كمحرف للهروب في Bash، إذ تحتفظ بالمعنى المباشر للمحرف الذي يليها باستثناء محرف السطر الجديد، فإن أتى محرف سطر جديد بعد الشرطة المائلة فإنه يحدد استكمال السطر الحالي إن كان أطول من من عرض الطرفية، وعندئذ تُلغى الشرطة المائلة من المُدخلات ويتم تجاهلها.
في المثال التالي ننشئ متغيرًا باسم date
ونضبطه على قيمة ما، ويعرض أمر echo
تلك القيمة عند استدعاء متغير date
، أما في المرة الثانية التي نستخدم فيها محرف \
فإن علامة $
يتم تجاهلها ويطبع أمر echo
ما يليه كنص عادي:
hsoub ~> date=20021226
hsoub ~> echo $date
20021226
hsoub ~> echo \$date
$date
علامات التنصيص المفردة
تُستخدم علامات التنصيص المفردة ''
للاحتفاظ بالقيمة الحرفية لكل محرف يقع داخل علامات التنصيص، ولا تأتي علامة تنصيص مفردة بين علامتي تنصيص مفردتين حتى لو سُبقت بشرطة مائلة. نتابع مع المثال السابق:
hsoub ~> echo '$date'
$date
علامات التنصيص المزدوجة
تُستخدم علامات التنصيص المزدوجة للاحتفاظ بالقيم الحرفية لكل المحارف التي تقع بينها باستثناء علامة $
وعلامات التنصيص المفردة الخلفية ``
والشرطة المائلة الخلفية \
.
ذلك أن علامة الدولار $
وعلامات التنصيص المفردة الخلفية ``
تحتفظ بوظائفها الخاصة داخل علامات التنصيص المزدوجة.
ولا تحتفظ الشرطة المائلة الخلفية \
بوظيفتها الخاصة داخل علامتي تنصيص إلا إن جاء وراءها $
أو `
أو "
أو \
أو سطر جديد، وتُحذَف الشرطة المائلة الخلفية من المُدخلات إن جاء وراءها أحد تلك المحارف. أما إن جاءت الشرطة المائلة قبل محارف لا تحمل وظائف خاصة فإنها تُترك بدون تعديل ليعالجها مفسّر الصدفة.
كذلك فإنه يمكن استخدام علامتي تنصيص مزدوجتين داخل علامتين أخرتين مزدوجتين، انظر المثال التالي للتوضيح أكثر:
hsoub ~> echo "$date"
20021226
hsoub ~> echo "`date`"
Sun Apr 20 11:22:06 CEST 2003
hsoub ~> echo "I'd say: \"Go for it!\""
I'd say: "Go for it!"
hsoub ~> echo "\"
More input>"
hsoub ~> echo "\\"
\
اقتباس ANSI-C
تُعامل الكلمات التي في صيغة "'STRING'$"
بشكل خاص، إذ تُوسَّع الكلمة إلى نص (string)، مع استبدال المحارف التي تم تجاهلها بسبب الشرطة المائلة كما يُحدد في معايير ANSI-C. انظر توثيق Bash للاطلاع على تفصيل أكثر عن تسلسلات هروب الشرطة المائلة الخلفية.
المواقع المحلية Locales
حين يُسبق نص بين علامتي تنصيص مزدوجتين بعلامة $
فإنه يُترجَم وفقًا لإعدادات المحليّة (Locale)، ويوضع النص المترجم بين علامتي تنصيص مزدوجتين أيضًا. أما إن كانت المحليّة هو C
أو POSIX
فيتم تجاهل علامة $
.