
エイホ、カーニハン、ワインバーガーの共著「プログラミング言語AWK」を読んでいて、非常に基本的なことをあまり意識していなかったと、気づかされました。
awk内での文字列の記述です。
上記書籍のアクションに関する説明で、次のように記述されています。
「文字列定数は、"Asia"や"hello,world"あるいは""のように、文字の並びを引用符で囲むことによって作られる」(プログラミング言語AWK 初版 44ページ)
「文字列定数はダブルクォーテーションマークで囲んだ0個以上の連続する文字である」(プログラミング言語AWK 第2版 209ページ)
この場合の「定数」というのは、変数ではない定まった「値」の意味だろうと思いますが、要は、awk内で文字列を記述するときは、ダブルクォーテーションで括る、ということです。
非常に基本的な事柄なのに、これまであやふやな認識でいました。というのも、この点は、シェルスクリプト等における文字列記述と、しきたりが違うからです。
Bash等のシェルで文字列を記述するには、必ずしも引用符で囲む必要がありません。「*」や「?」等のメタ文字のエスケープには引用符(シングルクォートやダブルクォート)が必要ですが、そうでない限り、引用符は必要とされません。たとえば、変数に文字列を代入するとき、「hensu=あいう」とすればよく、代入文字列を引用符で囲まなくてもOKです。
これに対し、awk内で文字列を記述するのに、文字列をダブルクォーテーションで囲まないとエラーとなります。
この点は、ルールが統一されておらず、注意が必要です。
次の例をご覧ください。

「echo あ:い:う」 の箇所ではクォーテーションは不要なのに対して、{print "2番目"} の箇所ではダブルクォーテーションが必要です。ちょっと紛らわしいですね。だから、意識しておくべきでしょう。何度も書いていれば、自然と体が覚えるでしょうが。
それではまた次の記事で。
goosyun
