Jak*_*son 493 syntax bash shell sh variable-assignment
我有一个名为test.sh的脚本:
#!/bin/bash
STR = "Hello World"
echo $STR
Run Code Online (Sandbox Code Playgroud)
我跑的时候sh test.sh得到这个:
test.sh: line 2: STR: command not found
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我在网上看一下非常基础/初学者的bash脚本教程,这就是他们说声明变量的方式......所以我不确定我做错了什么.
我在Ubuntu Server 9.10上.是的,bash位于/bin/bash.
Wil*_*ell 883
'='符号周围不能有空格.
当你写:
STR = "foo"
Run Code Online (Sandbox Code Playgroud)
bash尝试运行一个名为STR的命令,带有2个参数(字符串'='和'foo')
当你写:
STR =foo
Run Code Online (Sandbox Code Playgroud)
bash尝试使用1个参数运行名为STR的命令(字符串'= foo')
当你写:
STR= foo
Run Code Online (Sandbox Code Playgroud)
bash尝试运行命令foo,并将STR设置为其环境中的空字符串.
我不确定这是否有助于澄清或仅仅是混淆,但请注意:
STR "=" "foo",STR "=foo",STR="" foo."简单命令"是一系列可选的变量赋值和重定向,以任何顺序,可选地后跟字和重定向,由控制操作符终止.
在该上下文中,a word是bash将要运行的命令.包含=(在字符串开头以外的任何位置)不是重定向的任何字符串都是变量赋值,而不是重定向且不包含的任何字符串=都是命令.In STR = "foo",STR不是变量赋值.
Joe*_*oey 154
放下=标志周围的空格:
#!/bin/bash
STR="Hello World"
echo $STR
Run Code Online (Sandbox Code Playgroud)
小智 7
我知道这已经得到了非常高质量的回答。但是,简而言之,您不能有空格。
#!/bin/bash
STR = "Hello World"
echo $STR
Run Code Online (Sandbox Code Playgroud)
由于等号周围的空格而不起作用。如果你要跑...
#!/bin/bash
STR="Hello World"
echo $STR
Run Code Online (Sandbox Code Playgroud)
它会工作
在交互模式下一切都很好
$ str="Hello World"
$ echo $str
Hello World
Run Code Online (Sandbox Code Playgroud)
显然!正如约翰内斯所说,"="周围没有空间.如果'='周围有空格,那么在交互模式下它会给出错误
找不到命令'str'
当您定义任何变量时,您不必输入任何额外的空格。
例如
name = "Stack Overflow"
// it is not valid, you will get an error saying- "Command not found"
Run Code Online (Sandbox Code Playgroud)
因此删除空格:
name="Stack Overflow"
Run Code Online (Sandbox Code Playgroud)
它会工作得很好。