我有一个名为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
。
#1楼
在=
号周围删除空格:
#!/bin/bash
STR="Hello World"
echo $STR
#2楼
您的‘=‘符号周围不能有空格。
当你写:
STR = "foo"
bash尝试运行带有2个参数(字符串‘=‘和‘foo‘)的名为STR的命令
当你写:
STR =foo
bash尝试运行带有1个参数的STR命令(字符串‘= foo‘)
当你写:
STR= foo
bash尝试在其环境中将STR设置为空字符串的情况下运行命令foo。
我不确定这是否有助于澄清或仅仅是混淆,但请注意:
- 第一个命令完全等效于:
STR "=" "foo"
, - 第二个与
STR "=foo"
, - 最后一个等效于
STR="" foo
。
sh语言规范的相关部分,第2.9.1节指出:
“简单命令”是可选变量赋值和重定向的序列,该序列以任何顺序可选地跟随单词和重定向,并由控制操作员终止。
在这种情况下,一个word
就是bash将要运行的命令。 任何包含=
字符串(在字符串的开头以外的任何位置)不是重定向的,则是变量分配,而不是重定向且不包含=
任何字符串,则是命令。 在STR = "foo"
, STR
不是变量赋值。
#3楼
在交互模式下,一切看起来都很好
$ str="Hello World"
$ echo $str
Hello World
显然! 正如约翰内斯所说,“ =”周围没有空格。 如果‘=‘周围有空格,则在交互模式下,它会给出错误,如`
找不到命令“ str”
#4楼
定义任何变量时,您不必放置任何额外的空格。
例如
name = "Stack Overflow"
// it is not valid, you will get an error saying- "Command not found"
因此,删除空格:
name="Stack Overflow"
它将正常工作。
#5楼
我知道这已经得到了非常高质量的答复。 但是,总之,您不能有空格。
#!/bin/bash
STR = "Hello World"
echo $STR
由于等号周围存在空格而无法正常工作。 如果你要跑步...
#!/bin/bash
STR="Hello World"
echo $STR
会的