Bash变量分配中找不到命令错误

我有一个名为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')

当你写:

扫描二维码关注公众号,回复: 8648133 查看本文章
STR= foo

bash尝试在其环境中将STR设置为空字符串的情况下运行命令foo。

我不确定这是否有助于澄清或仅仅是混淆,但请注意:

  1. 第一个命令完全等效于: STR "=" "foo" ,
  2. 第二个与STR "=foo" ,
  3. 最后一个等效于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

会的

 来源: SEO技术

猜你喜欢

转载自www.cnblogs.com/1994jinnan/p/12203327.html
今日推荐