我有一个名为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
vvppvyoh1#
=符号周围不能有空格。当你写:
=
STR = "foo"
bash尝试运行一个名为STR的命令,该命令有两个参数(字符串=和foo)当你写:
STR
foo
STR =foo
bash尝试运行一个名为STR的命令,带有1个参数(字符串=foo)当你写:
=foo
STR= foo
bash尝试在其环境中运行STR设置为空字符串的foo命令。我不确定这是否有助于澄清或仅仅是混淆,但请注意:1.第一个命令完全等同于:STR "=" "foo",1.第二个与STR "=foo"相同,1.最后一个等价于STR="" foo。sh语言规范的相关部分,第2.9.1节指出:一个“简单命令”是一个可选的变量赋值和重定向的序列,以任何顺序,可选地后跟单词和重定向,由控制操作符终止。在这种情况下,bash将运行word命令。任何包含=的字符串(在字符串开头以外的任何位置),如果不是重定向,并且在=之前的字符串部分是有效的变量名,则是变量赋值,而任何不是重定向或变量赋值的字符串都是命令。在STR = "foo"中,STR不是变量赋值。
STR "=" "foo"
STR "=foo"
STR="" foo
word
ktecyv1j2#
删除=符号周围的空格:
#!/bin/bash STR="Hello World" echo $STR
tag5nh1u3#
在交互模式下,一切看起来都很好:
$ str="Hello World" $ echo $str Hello World
显然,正如Johannes所说,=周围没有空间。如果=周围有任何空间,则在交互模式下,它会给出错误,未找到命令“str”
siv3szwd4#
我知道这个问题已经得到了非常高质量的回答。但是,简而言之,你不能有空间。
因为等号周围有空格所以不起作用。如果你要逃跑...
它会工作
ruyhziif5#
当你定义任何变量的时候,你不需要在里面放任何额外的空格。例如
name = "Stack Overflow" // it is not valid, you will get an error saying- "Command not found"
所以去掉空格:
name="Stack Overflow"
它会很好地工作。
cig3rfwq6#
添加到接受的答案-使用破折号在您的变量名将给予给予同样的错误。删除-以消 debugging 误。
-
STR-STR="Hello World" bash: STR-STR=Hello World: command not found
6条答案
按热度按时间vvppvyoh1#
=
符号周围不能有空格。当你写:
bash尝试运行一个名为
STR
的命令,该命令有两个参数(字符串=
和foo
)当你写:
bash尝试运行一个名为
STR
的命令,带有1个参数(字符串=foo
)当你写:
bash尝试在其环境中运行STR设置为空字符串的
foo
命令。我不确定这是否有助于澄清或仅仅是混淆,但请注意:
1.第一个命令完全等同于:
STR "=" "foo"
,1.第二个与
STR "=foo"
相同,1.最后一个等价于
STR="" foo
。sh语言规范的相关部分,第2.9.1节指出:
一个“简单命令”是一个可选的变量赋值和重定向的序列,以任何顺序,可选地后跟单词和重定向,由控制操作符终止。
在这种情况下,bash将运行
word
命令。任何包含=
的字符串(在字符串开头以外的任何位置),如果不是重定向,并且在=
之前的字符串部分是有效的变量名,则是变量赋值,而任何不是重定向或变量赋值的字符串都是命令。在STR = "foo"
中,STR
不是变量赋值。ktecyv1j2#
删除
=
符号周围的空格:tag5nh1u3#
在交互模式下,一切看起来都很好:
显然,正如Johannes所说,
=
周围没有空间。如果=
周围有任何空间,则在交互模式下,它会给出错误,未找到命令“str”
siv3szwd4#
我知道这个问题已经得到了非常高质量的回答。但是,简而言之,你不能有空间。
因为等号周围有空格所以不起作用。如果你要逃跑...
它会工作
ruyhziif5#
当你定义任何变量的时候,你不需要在里面放任何额外的空格。
例如
所以去掉空格:
它会很好地工作。
cig3rfwq6#
添加到接受的答案-使用破折号在您的变量名将给予给予同样的错误。删除
-
以消 debugging 误。