谁能解释这个bash脚本在这里发生了什么?

时间:2019-04-14 02:27:34

标签: linux bash

对于此UNIX Shell脚本,我必须使用有意义的示例输入来 说明目的和任何可能的输出。

str=””
for word in $*
do
    if [$word == Tokyo]
    then
        str = “Capital Japan $str”
    else
        str = “$word $str”
    fi
done

echo str;

2 个答案:

答案 0 :(得分:2)

您的脚本存在以下问题:

  • [后需要空格,因为它是命令。另外,您在]
  • 前需要一个空格
  • 在if语句中引用比较的两端都是good practice
  • 需要使用双引号而不是您当前使用的正确的双引号
  • 分配给变量时需要删除=周围的空格
  • 无需初始化str
  • 任务str="$word $str"不清楚

这些更正之后,脚本将变为:

# scipt.sh
for word in $*
do
    if [ "$word" == "Tokyo" ]
    then
        str="Capital Japan $str"
        echo "$str"
    else
        str="$word"
        echo "$str"
    fi
done

从外壳测试脚本:

$ bash script.sh some Tokyo word
some
Capital Japan Tokyo
word

答案 1 :(得分:1)

首先,您的代码有错误:

第一个错误:

:auth(*)

应为:

auth

auth之后和if [$word == Tokyo] 之前的空格,并在“ $ word”前后加引号,以防止单词分裂

然后下一个:

if [ "$word" == Tokyo ]

应为:

[

请注意,],等号和str = “Capital Japan $str” 之间没有空格。第8行存在相同的问题。 您还会注意到不同的引号吗?这些是您应该使用的双引号。在代码的第一行和第8行都是这种情况。

最后,要打印出变量str="Capital Japan $str" ,请输入:

str

尽管我建议使用引号。就像关注

"Capital Japan $str"

最后一个错误导致脚本打印str而不是名为echo $str 的字符串