![awkコマンドのコメント内の一重引用符が引用符と一致しないのはなぜですか? [コピー]](https://linux33.com/image/172962/awk%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%AE%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88%E5%86%85%E3%81%AE%E4%B8%80%E9%87%8D%E5%BC%95%E7%94%A8%E7%AC%A6%E3%81%8C%E5%BC%95%E7%94%A8%E7%AC%A6%E3%81%A8%E4%B8%80%E8%87%B4%E3%81%97%E3%81%AA%E3%81%84%E3%81%AE%E3%81%AF%E3%81%AA%E3%81%9C%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
ファイルの列1の値を合計する次のawkステートメントを検討してください。
cat $1 e | awk ' {total=total+$1} # this comment does not contain any single quote marks
END {printf("%.2f\n",total)}
'
期待どおりに動作します。
それでは、同じステートメントを維持しながらコメントを変更して、内部に一重引用符を追加しましょう。
cat $1 e | awk ' {total=total+$1} # don't do this
END {printf("%.2f\n",total)}
'
Mac OsまたはCentosでこのプログラムを実行すると、次のエラーが発生します。
./bad_sum: line 2: syntax error near unexpected token `
./bad_sum: line 2: ` END {printf("%.2f\n",total)}'
awkがdon'tの引用符をawkの後の引用符と一致させようとしているので、混乱しています。しかし、コメントは無視する必要がありますが、これをどのように説明しますか?
答え1
これはawkとは関係ありません。ほとんどのシェル(Bourneまたはcshに似ていると見なされるシェル)では、一重引用符で区切られたスクリプトまたは文字列内に一重引用符を含めることはできません。試してecho 'foo'bar'
、失敗することを確認してください。今すぐ試してecho 'foo\'bar'
、失敗することを確認してください。今、彼らの成功の理由を見つけることができることを確認echo "foo'bar"
してください。 (いいえ、私はそうです。echo 'foo'\''bar'
いいえスクリプトを二重引用符で囲むことをお勧めします。バラよりhttps://mywiki.wooledge.org/Quotesより多くの情報を知りたいです。
答え2
これは、シェルが awk ではなくシェルで引用符と残りの awk ステートメントを解釈するためです。