hogeとはワイルドカードのようなものです。日々起こった、さまざまなこと −すなわちワイルドカード− を取り上げて日記を書く、という意味で名付けたのかというとそうでもありません。適当に決めたらこんな理由が浮かんできました。
07/08/2003 む [長年日記]
■ [日記][英語] The thermo bottle
Yesterday, I went to Homac ( is a home amenity center. ) with a friend together, for buy a cleanser for thermo bottles and any furnishings, for my Lab., because thermo bottle at my Lab. was too dirty. Some problem happened by a receipt, but it isn't very big problem ( really? ;-P ).
And, I use this cleanser to a thermo bottle at my Lab. After, this bottle has become very very clean, like a new article completely. Great!
■ [ニュース] 2003年上半期ウィルス感染被害状況
しっかし一向に減らんね.
■ [ニュース] データイーストが倒産
な,なにぃぃぃ! カルノフカムバック!
■ [ニュース] 「私はマナーを守っている。他人のマナーは悪い」
いかにもメリケン人だよなー.国を象徴してるわ.
■ [メモ][ニュース] 電子透かしを利用したインターネットアクセスプラットフォーム
メモ.
■ [日記] 象
ミリンって10回言ってみてー.
ミリンミリンミリンミリンミリンミリンミリンミリンミリンミリン.
鼻の長い動物は何でしょー?
キリンー.
ぶっぶー違いまーす.象でしたー.
ぎゃふん.やられたー.
おわり.
■ [日記] w-inds
昨日へにょ氏とこんな話をしてました.
あ:Dark MooRって何かボーイソプラノって感じだよねー.
へ:あーそりゃNightwishに慣れたからだろー.
あ:いや,ていうかさ,…w-indsとかってこんな声で歌ってそうじゃねぇ?
へ:…あーーー!!
あ:だよなー?
へ:つか何てこと言うんだ,Dark MooRがw-indsにしか聞こえなくなったじゃないか!
…てか今気づいたけど縦読みすると「あへあへあへ」になって嫌な感じだな.
そういや w-inds ってさー.
ダブルインド人
って感じじゃない? …と思って検索かけたらやっぱり既出だった.でも一件しかなかった.意外.
■ [Bash][Tips] さぁ選べ!
case をやったので次は select にでも.対話的プログラムを書くときにメニューを作成したくなる場合がある.例えば「次の中から番号を選択してください」なんてことを簡単にやってくれるのが select だ.次の例を見てみて欲しい.
$ select hoge in 6 7 8 9 end; do [ "${hoge}" = "end" ] &&
> break || echo "$hoge + 5 = $(($hoge + 5))" ; done
select hoge in 6 7 8 9 end
do
[ "${hoge}" = "end" ] && break || echo "$hoge + 5 = $(($hoge + 5))"
done
例によって上記の2つの例は全く同じ処理をするものなんだけど,これを実行すると以下のような形になる*1.
1) 6
2) 7
3) 8
4) 9
5) end
#?
つまり「さぁ選べ!」の状態だ.このメニューは,見ての通り in 以降改行までの文字の羅列から生成される.この #? プロンプトで対応する数字を入力してみると….
#? 1
6 + 5 = 11
ここで何が起こったかというと,select の次にあった hoge という名前の変数に,対応する文字列が代入され,do 〜 doneまでの処理が実行されるというわけだ.この例では do 〜 done の中はどうなっているかというと,$hoge が end でなければ 5 との足し算をし,end だったなら break,つまり select 処理を脱するというものだ.ここで選んだのは 1,つまり対応する値は 6 なので,6 + 5 = 11 という結果が得られたわけだ.
実際に使う場合に注意しなければならないのは,この処理は無限ループする*2ということだ.いったんメニューから何かを選んだら処理をさせて終わり,という風にしたいのであれば
select hoge in 6 7 8 9 end
do
[ "${hoge}" = "end" ] && break || echo "$hoge + 5 = $(($hoge + 5))"
break
done
という風に,最後に break を入れるなどする必要がある.
また,入力に対応する数字がなかった(この例だと10とかいう入力があった)場合,$hoge には空文字列が代入される.そういうエラー処理なんかも書いておくと良いかも知れない.
select hoge in 6 7 8 9 end
do
if [ -z "${hoge}" ]
then
echo "invalid number."
else
[ "${hoge}" = "end" ] && break || echo "$hoge + 5 = $(($hoge + 5))"
fi
done
1) 6
2) 7
3) 8
4) 9
5) end
#? 100
invalid number.
ちなみにこの #? というプロンプトが気に食わなければ,PS3という変数の値を変えてやればいい.
$ PS3="Please select a number. > "
$ select hoge in 6 7 8 9 end; do ....
1) 6
2) 7
3) 8
4) 9
5) end
Please select a number. >