الفرق بين المراجعتين لصفحة: «Bash/quoting characters»
أسامه-دمراني (نقاش | مساهمات) إدخال 1.0، عنوان الصفحة |
أسامه-دمراني (نقاش | مساهمات) إدخال 2.0 محتوى، تصنيفات، انظر أيضًا، مصادر - إدخال 3.0 تنسيقات |
||
سطر 1: | سطر 1: | ||
<noinclude>{{DISPLAYTITLE:اقتباس المحارف في Bash}}</noinclude> | <noinclude>{{DISPLAYTITLE:اقتباس المحارف في Bash}}</noinclude> | ||
== فائدة اقتباس المحارف == | |||
تحمل كثيرًا من المحارف والكلمات معاني ووظائف خاصة بشكل أو بآخر، ويُستخدم الاقتباس لإلغاء ذلك المعنى أو الوظيفة الخاصة، إذ تعطِّل علامات التنصيص في Bash تلك المعاملة التي يلقاها المحرف الخاص، وتمنع معاملة الكلمات الخاصة وفقًا للمعاني التي تحملها، وكذلك تعطِّل توسع المعامِلات. | |||
== محارف الهروب == | |||
تُستخدم محارف الهروب لإلغاء المعنى الخاص لمحرف واحد، وتُستخدم الشرطة المائلة الخلفية <code>\</code> كمحرف للهروب في Bash، إذ تحتفظ بالمعنى المباشر للمحرف الذي يليها باستثناء محرف السطر الجديد، فإن أتى محرف سطر جديد بعد الشرطة المائلة فإنه يحدد استكمال السطر الحالي إن كان أطول من من عرض الطرفية، وعندئذ تُلغى الشرطة المائلة من المُدخلات ويتم تجاهلها. | |||
في المثال التالي ننشئ متغيرًا باسم <code>date</code> ونضبطه على قيمة ما، ويعرض أمر <code>echo</code> تلك القيمة عند استدعاء متغير <code>date</code>، أما في المرة الثانية التي نستخدم فيها محرف <code>\</code> فإن علامة <code>$</code> يتم تجاهلها ويطبع أمر <code>echo</code> ما يليه كنص عادي:<syntaxhighlight lang="bash"> | |||
hsoub ~> date=20021226 | |||
hsoub ~> echo $date | |||
20021226 | |||
hsoub ~> echo \$date | |||
$date | |||
</syntaxhighlight> | |||
== علامات التنصيص المفردة == | |||
تُستخدم علامات التنصيص المفردة <code><nowiki>''</nowiki></code> للاحتفاظ بالقيمة الحرفية لكل محرف يقع داخل علامات التنصيص، ولا تأتي علامة تنصيص مفردة بين علامتي تنصيص مفردتين حتى لو سُبقت بشرطة مائلة. نتابع مع المثال السابق:<syntaxhighlight lang="bash"> | |||
hsoub ~> echo '$date' | |||
$date | |||
</syntaxhighlight> | |||
== علامات التنصيص المزدوجة == | |||
تُستخدم علامات التنصيص المزدوجة للاحتفاظ بالقيم الحرفية لكل المحارف التي تقع بينها باستثناء علامة <code>$</code> وعلامات التنصيص المفردة الخلفية <code>``</code> والشرطة المائلة الخلفية <code>\</code>. | |||
ذلك أن علامة الدولار <code>$</code> وعلامات التنصيص المفردة الخلفية <code>``</code> تحتفظ بوظائفها الخاصة داخل علامات التنصيص المزدوجة. | |||
ولا تحتفظ الشرطة المائلة الخلفية <code>\</code> بوظيفتها الخاصة داخل علامتي تنصيص إلا إن جاء وراءها <code>$</code> أو <code>`</code> أو <code>"</code> أو <code>\</code> أو سطر جديد، وتُحذَف الشرطة المائلة الخلفية من المُدخلات إن جاء وراءها أحد تلك المحارف. أما إن جاءت الشرطة المائلة قبل محارف لا تحمل وظائف خاصة فإنها تُترك بدون تعديل ليعالجها مفسّر الصدفة. | |||
كذلك فإنه يمكن استخدام علامتي تنصيص مزدوجتين داخل علامتين أخرتين مزدوجتين، انظر المثال التالي للتوضيح أكثر:<syntaxhighlight lang="bash"> | |||
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 "\\" | |||
\ | |||
</syntaxhighlight> | |||
== اقتباس ANSI-C == | |||
تُعامل الكلمات التي في صيغة <code>"'STRING'$"</code> بشكل خاص، إذ تُوسَّع الكلمة إلى نص (string)، مع استبدال المحارف التي تم تجاهلها بسبب الشرطة المائلة كما يُحدد في معايير ANSI-C. انظر توثيق Bash للاطلاع على تفصيل أكثر عن تسلسلات هروب الشرطة المائلة الخلفية. | |||
== المواقع المحلية Locales == | |||
حين يُسبق نص بين علامتي تنصيص مزدوجتين بعلامة <code>$</code> فإنه يُترجَم وفقًا لإعدادات الموقع المحلي (Locale)، ويوضع النص المترجم بين علامتي تنصيص مزدوجتين أيضًا. أما إن كان الموقع المحلي هو C أو <code>POSIX</code> فيتم تجاهل علامة <code>$</code>. | |||
== انظر أيضًا == | |||
* [[Bash/displaying user messages|عرض رسائل المستخدم في Bash]]. | |||
* [[Bash/catching user input|الحصول على مُدخلات المستخدم في Bash]]. | |||
== مصادر == | |||
* <span> </span>[http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_03_03.html دليل Bash للمبتدئين، باب بيئة Bash، فصل اقتباس المحارف]. | |||
[[تصنيف:Bash]] | |||
[[تصنيف:Bash Quoting Characters]] | |||
[[تصنيف:Bash Escape Characters]] |
مراجعة 03:00، 13 أغسطس 2018
فائدة اقتباس المحارف
تحمل كثيرًا من المحارف والكلمات معاني ووظائف خاصة بشكل أو بآخر، ويُستخدم الاقتباس لإلغاء ذلك المعنى أو الوظيفة الخاصة، إذ تعطِّل علامات التنصيص في 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
فيتم تجاهل علامة $
.