shell 在Bash变量赋值中未找到命令错误

6gpjuf90  于 2023-10-23  发布在  Shell
关注(0)|答案(6)|浏览(185)

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

vvppvyoh

vvppvyoh1#

=符号周围不能有空格。
当你写:

STR = "foo"

bash尝试运行一个名为STR的命令,该命令有两个参数(字符串=foo
当你写:

STR =foo

bash尝试运行一个名为STR的命令,带有1个参数(字符串=foo
当你写:

STR= foo

bash尝试在其环境中运行STR设置为空字符串的foo命令。
我不确定这是否有助于澄清或仅仅是混淆,但请注意:
1.第一个命令完全等同于:STR "=" "foo"
1.第二个与STR "=foo"相同,
1.最后一个等价于STR="" foo
sh语言规范的相关部分,第2.9.1节指出:
一个“简单命令”是一个可选的变量赋值和重定向的序列,以任何顺序,可选地后跟单词和重定向,由控制操作符终止。
在这种情况下,bash将运行word命令。任何包含=的字符串(在字符串开头以外的任何位置),如果不是重定向,并且在=之前的字符串部分是有效的变量名,则是变量赋值,而任何不是重定向或变量赋值的字符串都是命令。在STR = "foo"中,STR不是变量赋值。

ktecyv1j

ktecyv1j2#

删除=符号周围的空格:

#!/bin/bash 
STR="Hello World" 
echo $STR
tag5nh1u

tag5nh1u3#

在交互模式下,一切看起来都很好:

$ str="Hello World"
$ echo $str
Hello World

显然,正如Johannes所说,=周围没有空间。如果=周围有任何空间,则在交互模式下,它会给出错误,
未找到命令“str”

siv3szwd

siv3szwd4#

我知道这个问题已经得到了非常高质量的回答。但是,简而言之,你不能有空间。

#!/bin/bash
STR = "Hello World"
echo $STR

因为等号周围有空格所以不起作用。如果你要逃跑...

#!/bin/bash
STR="Hello World"
echo $STR

它会工作

ruyhziif

ruyhziif5#

当你定义任何变量的时候,你不需要在里面放任何额外的空格。
例如

name = "Stack Overflow"  
// it is not valid, you will get an error saying- "Command not found"

所以去掉空格:

name="Stack Overflow"

它会很好地工作。

cig3rfwq

cig3rfwq6#

添加到接受的答案-使用破折号在您的变量名将给予给予同样的错误。删除-以消 debugging 误。

STR-STR="Hello World"
bash: STR-STR=Hello World: command not found

相关问题