在Bashvariables赋值中找不到命令错误
我有这个脚本叫做test.sh:
#!/bin/bash STR = "Hello World" echo $STR  当我运行sh test.sh我得到这个: 
 test.sh: line 2: STR: command not found 
我究竟做错了什么? 我在网上看到极其基本的/初学者的bash脚本教程,这就是他们如何声明variables…所以我不知道我在做什么错了。
 我在Ubuntu服务器9.10。 是的,bash位于/bin/bash 。 
你的'='符号周围不能有空格。
当你写:
 STR = "foo" 
bash试图运行一个名为STR的带2个参数的命令(string'='和'foo')
当你写:
 STR =foo 
bash试图用1个参数(string'= foo')运行一个名为STR的命令
当你写:
 STR= foo 
bash试图运行命令foo,将STR设置为其环境中的空string。
我不确定这是否有助于澄清,或者是否仅仅是混淆,但请注意:
-  第一个命令完全等同于: STR "=" "foo",
-  第二个与STR "=foo",
-  最后等于STR="" foo。
sh语言规范2.9.1节的相关部分规定:
“简单命令”是一系列可选的variables赋值和redirect,以任何顺序,可选地跟随字和redirect,由控制操作员终止。
 在这种情况下,一个word就是bash要运行的命令。 任何不是redirect的string都是一个variables赋值,而任何不是redirect的string都不包含=是一个命令。 在STR = "foo" , STR不是一个variables赋值。 
 放下=号周围的空格: 
 #!/bin/bash STR="Hello World" echo $STR 
在交互模式下,一切都很好
 $ str="Hello World" $ echo $str Hello World 
显然! 正如Johannes所说,“=”周围没有空格。 如果在'='周围有空格,那么在交互模式下会给出错误
找不到命令'str'
当你定义任何variables,那么你不必在任何额外的空间。
例如
 name = "Stack Overflow" // it is not valid, you will get an error saying- "Command not found" 
所以删除空格:
 name="Stack Overflow" 
它会正常工作。