为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕婉清6462132 2019-05-27 10:49:13
Bash变量赋值中未找到命令错误我有一个名为test.sh的脚本:#!/bin/bashSTR = "Hello World"echo $STR我跑的时候sh test.sh得到这个:test.sh: line 2: STR: command not found我究竟做错了什么?我在网上看一下非常基础/初学者的bash脚本教程,这就是他们说声明变量的方式......所以我不确定我做错了什么。我在Ubuntu Server 9.10上。是的,bash位于/bin/bash。
查看完整描述

4 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

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

当你写:

STR = "foo"

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

当你写:

STR =foo

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

当你写:

STR= foo

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

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

  1. 所述第一命令是完全等效于:STR "=" "foo"

  2. 第二个是一样的STR "=foo"

  3. 而最后一个相当于STR="" foo

sh语言规范的相关部分,第2.9.1节规定:

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

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


查看完整回答
反对 回复 2019-05-27
?
慕标琳琳

TA贡献1830条经验 获得超9个赞

在交互模式下一切都很好

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

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

找不到命令'str'


查看完整回答
反对 回复 2019-05-27
?
交互式爱情

TA贡献1712条经验 获得超3个赞

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

例如

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

删除空格:

name="Stack Overflow"

它会工作正常。


查看完整回答
反对 回复 2019-05-27
  • 4 回答
  • 0 关注
  • 1543 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信