何时在 shell 脚本中对变量使用双引号?

何时在 shell 脚本中对变量使用双引号?

我对引用变量的双引号的含义感到困惑。例如,以下两个脚本给出相同的输出。双引号的真正含义是什么?

脚本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 指南提供反馈,以便它可以回到他一直参与的网站中。

相关内容