変数を引用する二重引用符の意味は混乱しています。たとえば、次の2つのスクリプトは同じ出力を提供します。二重引用符は実際に何を意味しますか?
スクリプト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
見て高度なバッシュスクリプトガイド、特に一部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になる可能性があります。
メモ:ABSガイドにフィードバックを提供して、自分が所属するサイトに戻ることができるようにしてくれた@StéphaneChazelasに感謝します。