シェルスクリプトの文字列ダンプ機能
文字列の前に$が付いてるやつってなんだろう?
そんなメールが、偉大なるかに先生から送られてきた。例を見ると、文字列、つまり二重引用符で囲んだリテラルの前に$が付いているコードがあるらしい。
echo -n $"$prog: Synchronizing with time server: "
・・・うーん。見たことないなぁ、こんなの。
試しに簡単なスクリプトを書いてみたのだが、$を付けようが付けまいが動作に変わりはない。有識者に聞いてみたが、彼も知らないという。そんなわけで「わかんね」という返事を返す。
1時間ほどして、再び返信があった。自力で突き止めた模様。さすがはかに先生、まっこと我々の指導者としてふさわしいお方。
-D 二重引用符によるクォート文字列 (double-quoted strings) に $ が前置されたものを、全てリストして標準出力に出力します。 これらは、カレントロケールが C または POSIX 以外の時に、 翻訳の対象となるべき文字列です。このオプションを指定すると、 自動的に -n オプションも指定されたことになります。 つまりコマンドは全く実行されません。 --dump-strings -D と同じです。
理解完了。
試しにスクリプト書いてみた。
#!/bin/bash msg=$"So long, and Thanks for All the Fish." echo "the last message from Dolphins: $msg"
実行。
$ bash hoge.sh the last message from Dolphins: So long, and Thanks for All the Fish. $ bash -D hoge.sh "So long, and Thanks for All the Fish."
ふむ!-D
を付けておくと確かに表示されるし、スクリプト自体は実行されない。これを国際化の足がかりに使う訳か。ユーザ向けに標準出力に出すメッセージには、とにかくコレを付けておいて良いのかもしれない。
っていうか、シェルスクリプトで国際化なんて考えたこともなかったよ!!