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

Des*_*PRG 5 linux shell scripting variable-substitution

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

脚本1

getent passwd | while IFS=: read a b c d e f ; do
echo login "$a" is "$d"
done
Run Code Online (Sandbox Code Playgroud)

脚本 2

#! /bin/sh

getent passwd | while IFS=: read a b c d e f ; do

    echo login $a is $d
done
Run Code Online (Sandbox Code Playgroud)

slm*_*slm 8

看看高级 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.
Run Code Online (Sandbox Code Playgroud)

在上面你可以看到,根据你引用变量的方式,它要么没有参数,要么是 3,要么是 1。

注意:感谢@StéphaneChazelas 向 ABS 指南提供反馈,以便它可以返回到他一直参与的这个站点。