つれづれ電脳記(日くらしPCに向かひて)

つれづれなるままに、日くらしPCに向かひて、その悪戦苦闘ぶりをそこはかとなく書き付くるおじさん。たまに雑談[管理人:goosyun]

つれづれなるままに、日くらしPCに向かひて、デジタル関係の悪戦苦闘ぶりをそこはかとなく書き付くるおじさんです。
たまに雑談してます。連絡・問い合わせフォームは、ページ最下部に置いています。[著者(運営人):goosyun]

(当ブログには本文中に広告リンクが含まれています。)

AWKとBashシェルとで「0」の扱いが正反対

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

True か False か???

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

それではまた次の記事で。
   goosyun