awk
コマンドが引用された単一の場合は、$2
は、シェルによって解釈されるのではなく、awk
に文字列リテラル$2
として渡されます。 awk
は、print
の入力文字列内の2番目のスペースで区切られたトークン(この場合はa
)になります。
echo "line1 a b c" | awk '{ print $2 }' # prints the second space-delimited token
> a
awk
コマンドは、二重引用符で囲まれている場合、$2
がシェルによって解釈されます。 $2
が空であるため(この場合)、空の文字列が置換されます。 awk
は、すべてを印刷する指示であるawk "{ print }"
のようなコマンドを表示します。
echo "line1 a b c" | awk '{ print }' # prints all input
> line1 a b c
二重のqotesを使用し、$
は、シェルによって解釈されないように、代わりに$2
文字列がawk
に渡される原因になります$
を、エスケープすることも可能です。
echo "line1 a b c" | awk "{ print \$2 }" # prints the second space-delimited token
> a
二重引用符を使用すると、シェルは2番目の位置パラメータに '$ 2 'を展開します。これは非常にうまくいくかもしれません。awkは' print'だけを見ます。 –
@ベンジャミンW。あなたの答えに同意しますが、重複しているとは思わないでください。 – michael
私はそれが*重複していない方法を見ることができません。一重引用符と二重引用符がどのように異なっているかに対する答えは、bashでは 'awk'を呼び出すためにbashを使うときの違いを答えています。 'awk'は' awk '{print}'と 'awk" {print $ 2} "との違いを、空の' $ 2'を持つbashと区別する方法がありません。 –