首页 文章

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

提问于
浏览
423

我有这个名为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 .

4 回答

  • 793

    '='符号周围不能有空格 .

    当你写:

    STR = "foo"
    

    bash尝试使用2个参数运行名为STR的命令(字符串'='和'foo')

    当你写:

    STR =foo
    

    bash尝试使用1个参数运行名为STR的命令(字符串'= foo')

    当你写:

    STR= foo
    

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

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

    • 第一个命令完全等同于: STR "=" "foo"

    • 第二个与 STR "=foo" 相同,

    • ,最后一个相当于 STR="" foo .

    sh language spec, section 2.9.1的相关部分指出:

    “简单命令”是一系列可选的变量赋值和重定向,按任意顺序,可选地后跟单词和重定向,由控制操作符终止 .

    在该上下文中, word 是bash将要运行的命令 . 包含 = (在字符串开头以外的任何位置)的任何不是重定向的字符串都是变量赋值,而任何不是重定向且不包含 = 的字符串都是命令 . 在 STR = "foo" 中, STR 不是变量赋值 .

  • 5

    删除 = 标志周围的空格:

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

    在交互模式下一切都很好

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

    显然!正如约翰内斯所说,'='周围没有空间 . 如果'='周围有空格,那么在交互模式下它会给出错误

    找不到命令'str'

  • 144

    定义任何变量时,您不必添加任何额外的空格 .

    例如 .

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

    删除空格:

    name="Stack Overflow"
    

    它会工作正常 .

相关问题