اقتباس المحارف في Bash

من موسوعة حسوب

فائدة اقتباس المحارف

تحمل كثيرًا من المحارف والكلمات معاني ووظائف خاصة بشكل أو بآخر، ويُستخدم الاقتباس لإلغاء ذلك المعنى أو الوظيفة الخاصة، إذ تعطِّل علامات التنصيص في Bash تلك المعاملة التي يلقاها المحرف الخاص، وتمنع معاملة الكلمات الخاصة وفقًا للمعاني التي تحملها، وكذلك تعطِّل توسع المعامِلات.

محارف الهروب

تُستخدم محارف الهروب لإلغاء المعنى الخاص لمحرف واحد، وتُستخدم الشرطة المائلة الخلفية \ كمحرف للهروب في Bash، إذ تحتفظ بالمعنى المباشر للمحرف الذي يليها باستثناء محرف السطر الجديد، فإن أتى محرف سطر جديد بعد الشرطة المائلة فإنه يحدد استكمال السطر الحالي إن كان أطول من من عرض الطرفية، وعندئذ تُلغى الشرطة المائلة من المُدخلات ويتم تجاهلها.

في المثال التالي ننشئ متغيرًا باسم date ونضبطه على قيمة ما، ويعرض أمر echo تلك القيمة عند استدعاء متغير date، أما في المرة الثانية التي نستخدم فيها محرف \ فإن علامة $ يتم تجاهلها ويطبع أمر echo ما يليه كنص عادي:

wiki ~> date=20021226

wiki ~> echo $date
20021226

wiki ~> 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 فيتم تجاهل علامة $.

انظر أيضًا

مصادر