小编典典

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

all

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


阅读 164

收藏
2022-03-04

共1个答案

小编典典

=标志周围不能有空格。

当你写:

STR = "foo"

bash 尝试运行一个以STR2 个参数(字符串=foo)命名的命令

当你写:

STR =foo

bash 尝试运行以STR1 个参数(字符串=foo)命名的命令

当你写:

STR= foo

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

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

  1. 第一个命令完全等同于:STR "=" "foo",
  2. 第二个是一样的STR "=foo"
  3. 最后一个等价于STR="" foo

sh 语言规范的相关部分,第 2.9.1
指出:

“简单命令”是一系列可选的变量赋值和重定向,以任何顺序,可选地后跟单词和重定向,由控制运算符终止。

在这种情况下, aword是 bash
将要运行的命令。任何包含=(在字符串开头以外的任何位置)的字符串不是重定向,并且其中字符串之前的部分=是有效的变量名是变量赋值,而任何不是重定向的字符串或变量赋值是一个命令。在STR = "foo",STR不是变量赋值。

2022-03-04