Linux 在bash脚本中,为什么要执行这个字符串的值?

Linux 在bash脚本中,为什么要执行这个字符串的值?,linux,bash,unix,shell,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:

为什么此脚本要执行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、 第一次尝试shell脚本

谢谢

您正在尝试执行命令
[hello
。请在
[
后面加一个空格,以便将其作为测试重新登录

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

假设“echo first”行仅用于调试,您可以通过以下方式实现相同的功能:

STRING=$STRING${STRING:+ }hello STRING=$STRING${STRING:+}您好 (也就是说,上面的行将产生与if语句相同的结果,但不会回显'first')

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