سؤال

لدي هذا البرنامج النصي يسمى test.sh:

#!/bin/bash
STR = "Hello World"
echo $STR

عندما أركض sh test.sh أحصل على هذا:

test.sh: line 2: STR: command not found

ما الخطأ الذي افعله؟ إنني أنظر إلى البرامج التعليمية البرمجية الأساسية/المبتدئين على الإنترنت ، وهكذا يقولون أن يعلنوا المتغيرات ... لذلك لست متأكدًا مما أفعله خطأ.

أنا على خادم Ubuntu 9.10. ونعم ، يقع باش في /bin/bash.

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

المحلول

لا يمكن أن يكون لديك مسافات حول علامة '='.

عندما تكتب:

STR = "foo"

يحاول باش تشغيل أمر يدعى Str مع وسيطتين (الأوتار "=" و "فو")

عندما تكتب:

STR =foo

يحاول باش تشغيل أمر يدعى STR مع وسيطة واحدة (السلسلة "= Foo")

عندما تكتب:

STR= foo

يحاول Bash تشغيل Command Foo مع ضبط STR على السلسلة الفارغة في بيئتها.

لست متأكدًا مما إذا كان هذا يساعد على توضيح أو إذا كان مجرد تعبئة ، ولكن لاحظ أن:

  1. الأمر الأول يعادل بالضبط: STR "=" "foo",
  2. والثاني هو نفسه STR "=foo",
  3. والأخير يعادل STR="" foo.

القسم ذي الصلة من SH لغة SP ، القسم 2.9.1 تنص على:

"الأمر البسيط" هو سلسلة من المهام المتغيرة الاختيارية وإعادة التوجيه ، بأي تسلسل ، تليها اختياريا الكلمات وإعادة الاتجاه ، التي تم إنهاءها بواسطة مشغل تحكم.

في هذا السياق ، أ word هو الأمر الذي سوف يعمل باش. أي سلسلة تحتوي = (في أي موضع آخر غير بداية السلسلة) وهو ليس إعادة توجيه هو مهمة متغيرة ، في حين أن أي سلسلة لا تعتبر إعادة توجيه ولا تحتوي على = هو أمر. في STR = "foo", STR ليست مهمة متغيرة.

نصائح أخرى

إسقاط المسافات حول = وقع:

#!/bin/bash 
STR="Hello World" 
echo $STR 

في الوضع التفاعلي ، يبدو كل شيء على ما يرام

$ str="Hello World"
$ echo $str
Hello World

بشكل ملحوظ ! كما قال يوهانس ، لا مساحة حول '='. في حالة وجود أي مساحة حول '=' ثم في الوضع التفاعلي ، فإنه يعطي أخطاء مثل ``

لم يتم العثور على أمر "Str"

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

#!/bin/bash
STR = "Hello World"
echo $STR

لم تعمل بسبب المساحات حول العلامة المتساوية. إذا كنت تريد الجري ...

#!/bin/bash
STR="Hello World"
echo $STR

سوف تعمل

عندما تحدد أي متغير ، فلن تضطر إلى وضع أي مساحات إضافية.

على سبيل المثال

name = "Stack Overflow"  
// it is not valid, you will get an error saying- "Command not found"

لذا قم بإزالة المساحات:

name="Stack Overflow" 

وسوف تعمل بشكل جيد.

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