web-dev-qa-db-ja.com

シェルスクリプトの変数で二重引用符を使用する場合

変数を参照する二重引用符の意味がわかりません。たとえば、次の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
5
DesirePRG

Advanced Bash Scripting Guide 、特にセクション 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に感謝します。これにより、ABSガイドは、彼が常に参加しているこのサイトに戻ることができます。

7
slm