在Bash变量赋值中找不到命令错误

我有一个名为test.sh的脚本:

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

当我运行sh test.sh我得到这个:

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

我究竟做错了什么? 我在网上查看极其基本的/初学者的bash脚本教程,这是他们如何声明变量的方式......所以我不确定我做错了什么。

我在Ubuntu Server 9.10上。 是的,bash位于/bin/bash


你的'='符号周围不能有空格。

当你写:

STR = "foo"

bash试图运行一个名为STR的带有2个参数的命令(字符串'='和'foo')

当你写:

STR =foo

bash尝试运行一个名为STR的命令,其中包含1个参数(字符串'= foo')

当你写:

STR= foo

bash尝试运行命令foo,将STR设置为其环境中的空字符串。

我不确定这是否有助于澄清,或者它是否仅仅是混淆,但请注意:

  • 第一个命令完全等同于: STR "=" "foo"
  • 第二个与STR "=foo"
  • 最后一个相当于STR="" foo
  • sh语言规范的相关章节2.9.1规定:

    “简单命令”是一系列可选的变量赋值和重定向,以任意顺序,可选地跟随字和重定向,由控制操作员终止。

    在这种情况下,一个word就是bash即将运行的命令。 任何包含= (除了在字符串开头以外的任何位置)不是重定向的字符串都是一个变量赋值,而任何非重定向且不包含=字符串都是一个命令。 在STR = "foo"STR不是一个变量赋值。


    放下=号周围的空格:

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

    在交互模式下一切都很好

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

    显然! 正如Johannes所说,'='周围没有空格。 如果在'='周围有空格,那么在交互模式下它会给出错误

    找不到命令'str'

    链接地址: http://www.djcxy.com/p/58893.html

    上一篇: Command not found error in Bash variable assignment

    下一篇: SQL Logic Operator Precedence: And and Or