سؤال

لقد تعثرت للتو عند بناء جملة باش:

foo=42
bar=$[foo+1] # evaluates an arithmetic expression

عندما غوجت لهذا، وجدت http://tldp.org/ldp/bash-beginners-guide/html/sect_03_04.htmlsect_03_04_05.:

3.4.6. التوسع الحسابي

التوسع الحسابي يسمح بتقييم تعبير حسابي واستبدال النتيجة. شكل التوسع الحسابي هو:

$(( EXPRESSION )) 

...

حيثما أمكن ذلك، يجب على مستخدمي Black محاولة استخدام بناء الجملة مع أقواس مربعة:

$[ EXPRESSION ] 

ومع ذلك، فإن هذا لن يحسب فقط نتيجة التعبير، ولا تفعل أي اختبارات ...

في صفحتي باش رجل يمكنني فقط العثور على $(( EXPRESSION )) شكل مثل:

foo=42
bar=$((foo+1)) # evaluates an arithmetic expression

إذن ما الاختبارات غير المقدمة $[...] التي تفعل مع $((...)), ، أو هو $[...] مجرد نسخة قديمة من $((...))?

هل كانت مفيدة؟

المحلول

يقول manepage ل bash v3.2.48:

...] تنسيق التوسع الحسابي هو:

     $((expression))

ال التنسيق القديم $ [التعبير] تم إهمال وسيتم إزالتها في الإصدارات المقبلة من باش.

لذا $[...] هو بناء الجملة القديم الذي لا ينبغي استخدامه بعد الآن.

نصائح أخرى

@ الأمر صحيح تماما. وفي حال كنت تشعر بالفضول في سبب وجود بناء جملة أكثر من حرفا الآن، تحقق من هذا البريد الإلكتروني القديم من القائمة البريدية.

http://lists.gnu.org/archive/html/bug-bash/bash/2012-04/msg00033.html.

"في المقترحات المبكرة، تم استخدام نموذج $ [تعبير]. كان يعادل بشكل وظيفي "$ ((((() $ ((((() ())"، ولكن تم تقديم الاعتراضات على أن كورنشيل 1988 قد نفذت بالفعل "$ ((() $ ()" وليس هناك سبب مقنع للاختراع بناء جملة آخر. علاوة على ذلك، فإن بناء جملة "$ [] عدم توافق بسيط ينطوي على الأنماط في تصريحات الحالة ".

لست متأكدا من أنني أحب الأساس المنطقي "لكن شخصا ما قد فعل ذلك بالفعل مرة أخرى،" ولكن هناك، ربما تكون هناك مشكلة بيان الحالة كانت أكثر إلحاحا مما أتخيل من هذا التذكر الغامض؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top