我有这个名为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 回答
'='符号周围不能有空格 .
当你写:
bash尝试使用2个参数运行名为STR的命令(字符串'='和'foo')
当你写:
bash尝试使用1个参数运行名为STR的命令(字符串'= foo')
当你写:
bash尝试运行命令foo,并将STR设置为其环境中的空字符串 .
我不确定这是否有助于澄清或是否仅仅是混淆,但请注意:
第一个命令完全等同于:
STR "=" "foo"
,第二个与
STR "=foo"
相同,,最后一个相当于
STR="" foo
.sh language spec, section 2.9.1的相关部分指出:
在该上下文中,
word
是bash将要运行的命令 . 包含=
(在字符串开头以外的任何位置)的任何不是重定向的字符串都是变量赋值,而任何不是重定向且不包含=
的字符串都是命令 . 在STR = "foo"
中,STR
不是变量赋值 .删除
=
标志周围的空格:在交互模式下一切都很好
显然!正如约翰内斯所说,'='周围没有空间 . 如果'='周围有空格,那么在交互模式下它会给出错误
定义任何变量时,您不必添加任何额外的空格 .
例如 .
删除空格:
它会工作正常 .