プログラミング言語AWKにおいては、パターンに式を記述しますが、その式の結果が0又は空文字であれば「偽」と評価されます。
それに対し、Bash等のシェルのif文においては、if直後のコマンドの終了ステータスが0であれば「真」と評価されます。
このように、AWKとBash等のシェルとで「0」の扱いが正反対になっています。特に、シェルスクリプトの中でAWKを使うこともあるので、その場面ではなおさら混乱します。
そこで、両者の取り扱いの差異を調べてみました。以下の記述内容は、ニュアンスが伝わるようにと、私なりに表現を工夫したものです。

awkにおいては、式の結果である評価値に着眼、注目しています。式の結果である値に中味があるかを見ています。「0」は値がない、空っぽを意味します。式の結果値が無なので、無価値となり、「偽」の評価になります。
それに対し、Bash等のコマンド終了ステータスは、「仕事が終わりました」と報告する際の、エラーの数を意味します。エラーの数が「0」ならば成功、つまり「真」の評価になります。終了ステータスが0以外ならば、エラーが発生したことを意味するから、それは無価値、「偽」の評価になります。つまり、実行の結果そのものを見ているのでなく、その際のエラーの有無を見ているわけです。
このように、同じ「0」であっても、その対象、着眼対象が違うわけです。AWKでは式の結果の値を見ているのに対し、Bashではコマンド実行の際のエラーの有無を見ているわけです。だから評価が違ってくる、というわけです。
このように理解すれば、頭の中もすっきり整理できます。
ところで、世の中には、いくつもの言語を話せる多言語話者がいます。先日、飲食店の同じテーブルに座った家族がそうでした。お母さんは日本人、お父さんは中国系アメリカ人で、休暇で日本に一時帰国したようです。その2人の娘さん(小学生)は、なんと、お母さんとは日本語で話すし、お父さんとは英語で会話していました。しかも、ごく自然に。会話の相手がだれかによる、言語の使い分けです。
このように、日本語モードと英語モードとを、相手に応じて、あるいは場所(いつも通っているアメリカの学校か自宅か)に応じて切り替えています。そうならば、頭の中で翻訳という作業は不要となっているはずです。
これと同じように、awkのパターンモードと、Bashのif文モードの使い分けが直感的にできるようになれば、これはもう、しめたものです。
それではまた次の記事で。
goosyun
