在变量赋值时,如果值有空格,Shell 会把空格后面的字符串解释为命令:

# VAR=1 2 3
-bash: 2: command not found 
# VAR="1 2 3"
# echo $VAR 
1 2 3
# VAR='1 2 3'
# echo $VAR 
1 2 3

看不出什么区别,再举个说明:

# N=3
# VAR="1 2 $N"
# echo $VAR 
1 2 3


# VAR='1 2 $N'
# echo $VAR 
1 2 $N

单引号是告诉 Shell 忽略特殊字符,而双引号则解释特殊符号原有的意义,比如$、!。