bash - bash脚本变量声明-命令没有发现

  显示原文与译文双语对照的内容
0 0

这似乎是一个简单的问题,我很尴尬地问它:

test.sh


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

当我运行 test.sh 时,我得到了以下信息:


test.sh: line 2: STR: command not found

我做错什么了? 我在网上查看了非常基本/初学者bash脚本教程,这就是它们如何声明变量。 所以我不确定我在做什么错误。

我在Ubuntu服务器 9.10上。 是的,bash位于 /bin/bash

时间: 原作者:

0 0

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

写入时:

 
STR ="foo"

 

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

写入时:

 
STR =foo

 

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

写入时:

 
STR= foo

 

bash尝试在它的环境中运行带有STR设置的命令 foo 。

我不确定这是否有帮助,或者只是混淆,但请注意:

  1. 第一个命令等效于: STR"=""foo"
  2. 第二个和 STR"=foo" 一样
  3. 最后一个等同于 STR="" foo

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

"简单命令"是可选变量赋值和重定向的序列,在任何顺序中,都可以按单词和重定向进行选择,由控制运算符终止。

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

原作者:
0 0

删除 = 符号周围的空格:


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

原作者:
0 0

在引用变量时,最好在变量周围使用大括号。

所以:


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

变成:


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

这是一个更明确的方法来引用你的变量。 打印带有文本的变量是必要的。 下面是一个简化的示例:


#!/bin/bash 
# list all the report files for January in a directory
REP_MONTH=January
ls./$REP_MONTH.rpt

上面的代码将给出一个错误,因为没有变量 $REP_MONTH.rpt 。 但是,如果你对变量使用完整语法( 大括号),那么你的意图就会更加清晰,并且可以毫无错误地解释。


#!/bin/bash 
# list all the report files for January in a directory
REP_MONTH=January
ls./${REP_MONTH}.rpt

花括号清楚地识别了命令构造中的bash变量。

原作者:
0 0

我已经阅读所有答案,但仍然有一件事需要注意:

STR=你好

STR=hello ls

1 st行将运行命令"打招呼",但将不使用 set将STR设置为""。

2nd线将运行命令"ls"但是不会"打招呼"str。

对于每个步骤,允许使用 $STR的回显来查看结果。

0 0

在交互模式一切都很好 !

:~$ str="Hello World"

:~$ echo $str

 
Hello World

 

显然就像julia说的,'='周围没有空间。 如果'='周围有任何空间,那么在交互模式下,它将出现错误

没有找到命令'str'

原作者:
...