我有一个名为test.sh的脚本:
#!/bin/bash STR = "Hello World" echo $STR
当我运行sh test.sh时,我得到这个:
sh test.sh
test.sh: line 2: STR: command not found
我做错了什么?我看了非常基本/初学者bash脚本在线教程,这就是他们如何声明变量…所以我不确定我做错了什么。
我用的是Ubuntu Server 9.10。是的,bash位于/bin/bash。
/bin/bash
删除=符号周围的空格:
=
#!/bin/bash STR="Hello World" echo $STR
=符号周围不能有空格。
当你写:
STR = "foo"
bash尝试运行一个名为STR的命令,带有两个参数(字符串=和foo)
STR
foo
STR =foo
bash尝试运行一个名为STR的命令,带有一个参数(字符串=foo)
=foo
STR= foo
bash尝试运行命令foo, STR设置为其环境中的空字符串。
我不确定这是否有助于澄清或仅仅是混淆,但请注意:
STR "=" "foo"
STR "=foo"
STR="" foo
Sh语言规范,第2.9.1节的相关部分指出:
“简单命令”;是任意顺序的可选变量赋值和重定向序列,可选后跟单词和重定向,以控制操作符结束。
在这个上下文中,word是bash将要运行的命令。任何包含=(在字符串开头以外的任何位置)的字符串,如果不是重定向,并且=之前的字符串部分是有效的变量名,则是变量赋值,而任何不是重定向或变量赋值的字符串都是命令。在STR = "foo"中,STR不是变量赋值。
word
在交互模式下,一切看起来都很好:
$ str="Hello World" $ echo $str Hello World
显然(!)正如Johannes所说,=周围没有空间。如果在=周围有空格,那么在交互模式下,它会给出错误为
没有找到命令'str'
当你定义任何变量时,你不需要插入任何额外的空格。
如。
name = "Stack Overflow" // it is not valid, you will get an error saying- "Command not found"
所以去掉空格:
name="Stack Overflow"
它会工作得很好。
我知道这个问题已经得到了高质量的回答。但是,简而言之,你不能有空格。
因为等号周围有空格。如果你要逃跑…
这是可行的