シェルスクリプトで変数に二重引用符を使用する必要がありますか? [コピー]

シェルスクリプトで変数に二重引用符を使用する必要がありますか? [コピー]

変数を引用する二重引用符の意味は混乱しています。たとえば、次の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に感謝します。

おすすめ記事