Command not found error in Bash variable assignment
我有一个叫做test.sh的脚本:
1 2 3 | #!/bin/bash STR ="Hello World" echo $STR |
当我运行
1 | test.sh: line 2: STR: command not found |
我做错什么了?我在网上看了非常基础/初学者的bash脚本教程,这就是他们如何声明变量…所以我不知道我做错了什么。
我在Ubuntu服务器9.10上。是的,bash位于
"="符号周围不能有空格。
当你写:
1 | STR ="foo" |
bash试图运行一个名为str的命令,该命令有两个参数(字符串"="和"foo")。
当你写:
1 | STR =foo |
bash试图运行一个名为str的命令,其中有1个参数(字符串"=foo")。
当你写:
1 | STR= foo |
bash试图运行命令foo,str在其环境中设置为空字符串。
我不确定这是否有助于澄清,或者只是混淆,但请注意:
SH语言规范第2.9.1节的相关章节规定:
A"simple command" is a sequence of optional variable assignments and redirections, in any sequence, optionally followed by words and redirections, terminated by a control operator.
在这种情况下,
删除
1 2 3 | #!/bin/bash STR="Hello World" echo $STR |
在交互模式下,一切看起来都很好
1 2 3 | $ str="Hello World" $ echo $str Hello World |
很明显!正如约翰内斯所说,在"="周围没有空间。如果"="周围有任何空格,则在交互模式下,它给出错误如下`
No command 'str' found
我知道这是一个非常高质量的答案。但是,简而言之,你不能有空间。
1 2 3 | #!/bin/bash STR ="Hello World" echo $STR |
因为等号周围有空格,所以不起作用。如果你要跑…
1 2 3 | #!/bin/bash STR="Hello World" echo $STR |
它会起作用
当您定义任何变量时,就不必再放入任何额外的空格。
例如。
1 2 | name ="Stack Overflow" // it is not valid, you will get an error saying-"Command not found" |
所以删除空格:
1 | name="Stack Overflow" |
它会很好地工作。
我也有同样的问题,但似乎不是语法错误。这里有一个简单的脚本:
1 2 3 4 5 | #!/bin/bash ssh -T user@server <<-EOSSH VAR1=test cd $VAR1 EOSSH |
在我认为前两个问题可以协商的情况下,这会产生以下错误:
1 2 3 | Warning: no access to tty (Bad file number). Thus no job control in this shell. VAR1=test: Command not found. |