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

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

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

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

Linuxで変数名をスペルミスしたときの挙動

 最近、Ubuntu Linux で、コマンド操作や、シェルスクリプトを作るなどして楽しんでいます。

 コマンドやスクリプトがうまく実行され、自分が構想したとおりに動いてくれたときは、気分爽快、気持ちがスカッとします。
 この達成感が、たまんない
 私は、コンピューターゲームはしないのですが、ゲーム進行がうまくいって、次のステージに上がることができたときの達成感が、おそらく、こういう気分でしょう。





 コマンドやスクリプトは、ユーザーが命じたとおりに動作し、融通は一切ききません。たった1文字のスペルミスであっても許してくれません。即座にエラーが出て、怒られます。

 このようにスペルミスがあれば、エラーを出して怒ってくれるのが原則です。
 けど、怒ってくれればいいのに、そうならない場面があります。
 それは、「変数」です。

 $ files=`find . -type f -name "*.sh"` ; echo ${files} 
というコマンドを打ち込みました。
 このコマンド実行の結果、「.sh」の拡張子のファイルを見つけ出して、表示してくれます。

 ところが、ここで変数を記述するとき、スペルミスを犯してしまいました。
 「${files}」 とすべきところを、
 「${file}」  と誤記してしまいました。
語尾に「s」を付け忘れ、変数「files」を、「file」とスペルミスしています。

 このとき、「fileという変数はないぞ。」と、エラーを出して怒ってくれればいいのに、そうはなりません。
 どうなるかというと、シレーっと、空白行が出力されます。
 変数「file」には値が何も代入されていないという解釈がされて、エラーを出すことなく、「空文字列」を出力するからです。

 WordマクロやExcelマクロのVBAでは、変数宣言の強制を設定しておくと、「fileという変数は定義されていません」っていうエラーを出してくれます。
 この仕様に慣れていたので、最初は戸惑いました。

 が、これは、Bashシェルの仕様なのです。
 受け入れるしかありません。そのうち、これに慣れてくるでしょう。




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


《2024年5月12日追記》
 Linuxシェルでの「変数の扱い方」全般を記事にまとめました。
  こちらの記事をご覧ください。