为什么在bash脚本中该字符串的值正在执行?

时间:2010-03-12 23:31:45

标签: linux bash unix shell

为什么这个脚本在if语句中执行字符串:

#!/bin/bash
FILES="*"
STRING=''

for f in $FILES
do
  if ["$STRING" = ""]
   then
    echo first
    STRING='hello'
   else
    STRING="$STRING hello"
  fi
done

echo $STRING

使用sh script.sh输出运行时

first
lesscd.sh: line 7: [hello: command not found
lesscd.sh: line 7: [hello hello: command not found
lesscd.sh: line 7: [hello hello hello: command not found
lesscd.sh: line 7: [hello hello hello hello: command not found
lesscd.sh: line 7: [hello hello hello hello hello: command not found
hello hello hello hello hello hello

P.S。首次尝试shell脚本
感谢

2 个答案:

答案 0 :(得分:6)

您正在尝试执行命令[hello。在[之后添加一个空格,以便将其视为测试。

for f in $FILES
do
  if [ "$STRING" = "" ]
   then
    echo first
    STRING='hello'
   else
    STRING="$STRING hello"
  fi
done

答案 1 :(得分:2)

假设行'echo first'仅用于调试,你可以用以下方法实现同样的目的:

STRING=$STRING${STRING:+ }hello

(也就是说,上面的行会产生与if语句相同的结果,但不会回显'first')

如果$ STRING为空或null,则表达式'$ {STRING:+}'的计算结果为空,否则计算结果为空格。