我对引用变量的双引号的含义感到困惑。例如,以下两个脚本给出相同的输出。双引号的真正含义是什么?
脚本1
getent passwd | while IFS=: read a b c d e f ; do
echo login "$a" is "$d"
done
脚本2
#! /bin/sh
getent passwd | while IFS=: read a b c d e f ; do
echo login $a is $d
done
答案1
看看高级 Bash 脚本编写指南,特别是部分5.1 涵盖引用变量。双引号变量的原因是因为变量的内容可能包含空格。空格通常是边界字符,对于大多数命令来说,它表示文本字符串中原子的中断。
有一个很好的例子可以说明这一点:
摘自上述链接
variable2="" # Empty.
COMMAND $variable2 $variable2 $variable2
# Executes COMMAND with no arguments.
COMMAND "$variable2" "$variable2" "$variable2"
# Executes COMMAND with 3 empty arguments.
COMMAND "$variable2 $variable2 $variable2"
# Executes COMMAND with 1 argument (2 spaces).
# Thanks, Stéphane Chazelas.
在上面您可以看到,根据引用变量的方式,它可以是无参数、3 或 1。
笔记:感谢 @StéphaneChazelas 向 ABS 指南提供反馈,以便它可以回到他一直参与的网站中。