我有一个名为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
。
我有一个名为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
。
在 =
符号周围不能有空格。
当你写成这样时:
STR = "foo"
bash尝试以两个参数(字符串“=”和“foo”)运行名为STR
的命令。
当您编写以下内容时:
STR =foo
bash试图用一个参数(字符串=foo
)来运行名为 STR
的命令。
当你写下以下内容时:
STR= foo
bash尝试在其环境中以STR设置为空字符串运行命令foo
。
我不确定这是否有助于澄清,还是只是混淆,但请注意:
STR "=" "foo"
,STR "=foo"
,STR="" foo
。sh语言规范第2.9.1节的相关部分说明:
“简单命令”是一系列可选的变量赋值和重定向,可以以任何顺序出现,后面可以跟单词和重定向,由控制操作符终止。
在这种情况下,word
是bash即将运行的命令。 任何包含=
(除了在字符串开头的位置之外的任何位置)并且不是重定向,并且其中=
之前的部分是有效变量名称的字符串都是变量赋值,而除重定向或变量赋值之外的任何字符串都是命令。 在STR = "foo"
中,STR
不是变量赋值。
$st=$i
并非变量赋值。它扩展为一个字符串,并作为命令执行。看起来你正在尝试执行 eval $st=$i
。不要这样做。 - William Pursell去掉等号周围的空格:
#!/bin/bash
STR="Hello World"
echo $STR
在交互模式下一切看起来都很好:
$ str="Hello World"
$ echo $str
Hello World
显然(!)如Johannes所说,在=
周围不要有任何空格。如果在=
周围有任何空格,则在交互模式下会出现以下错误:
未找到命令“str”
STR = "Hello World"
,因此这个答案在这里不适用。 - fedorqui$
标记有关吗? - Kasun Siyambalapitiya我知道这个问题已经得到了非常高质量的解答。但是简单来说,你不能有空格。
#!/bin/bash
STR = "Hello World"
echo $STR
#!/bin/bash
STR="Hello World"
echo $STR
它将正常工作。
name = "Stack Overflow"
// it is not valid, you will get an error saying- "Command not found"
因此,请去除空格:
name="Stack Overflow"
它会正常运行。
STR-STR="Hello World"
bash: STR-STR=Hello World: command not found
#!/usr/bin/env bash
而不是直接使用#!/bin/bash
,除非你绝对确定你的bash
在/bin
中,因为这个答案:https://dev59.com/0GEi5IYBdhLWcg3wIJJH#21613044 - Alejandro Blasco