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

时间:2010-02-15 18:32:30

标签: bash shell syntax sh variable-assignment

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

6 个答案:

答案 0 :(得分:834)

你的'='符号周围不能有空格。

当你写:

STR = "foo"

bash尝试使用2个参数运行名为STR的命令(字符串'='和'foo')

当你写:

STR =foo

bash尝试使用1个参数(字符串'= foo')

运行名为STR的命令

当你写:

STR= foo

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

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

  1. 第一个命令完全等同于:STR "=" "foo"
  2. 第二个与STR "=foo"相同,
  3. ,最后一个相当于STR="" foo
  4. sh language spec, section 2.9.1州的相关部分:

      

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

    在该上下文中,word是bash将要运行的命令。任何不是重定向的包含=(在字符串开头以外的任何位置)的字符串都是变量赋值,而任何不是重定向且不包含=的字符串都是命令。在STR = "foo"中,STR不是变量赋值。

答案 1 :(得分:152)

删除=符号周围的空格:

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

答案 2 :(得分:5)

在互动模式下,一切都很好看

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

显然!正如约翰内斯所说,“=”周围没有空间。如果'='周围有空格,那么在交互模式下,它会给出错误“

  

找不到命令'str'

答案 3 :(得分:0)

当您定义任何变量时,您不必添加任何额外的空格。

E.g。

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

所以删除空格:

name="Stack Overflow" 

它会正常工作。

答案 4 :(得分:0)

我知道此问题的回答非常高质量。但是,总之,您不能有空格。

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

由于等号周围的空格而无法工作。如果你要跑步...

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

那行得通

答案 5 :(得分:-1)

我有完全相同的问题,但似乎不是语法错误。这里是一个简单的脚本:

#!/bin/bash
ssh -T user@server <<-EOSSH
  VAR1=test
  cd $VAR1
EOSSH

这会输出以下错误,我认为前两个是可以协商的:

Warning: no access to tty (Bad file number).
Thus no job control in this shell.
VAR1=test: Command not found.
相关问题