Ansatzの備忘録

勉強したことあるいはふと思い立ったこと

シェルワンライナー160本ノック第二章練習問題その4

練習2.1.g 繰り返しと終了ステータス

for x in "$1" "$2" "$3" ; do echo x ; done

というコマンドは in の後ろをまとめて "$@" あるいは $* と書くこともできる。ダブルクォートで $* を囲むと一つの文字列として扱ってしまい意図しないループの回り方になってしまう。前回の記事を書いていたときはわからなかったがこの例を見てやっと @ と * の違いが分かってきた。

ひとつ気になったのは "$@" でまとめて書いたとき、どうやって for 文を止めているのかということだ。試行錯誤した結果、これもまた空文字列とダブルクォートで囲まれた空文字列の違いに行き着くのだろうなと思った。man bash の for の項目を読んでいるとどうやらそんな感じがする。

 

練習2.1.h 条件分岐

どうやるのかな、2で割ってみるか、いやでもそれだと文字が来た場合おかしくなるな、どうしたものか、と悩んだが正解はもっと単純だった。入力が1文字ということを考慮していなかったせいで無駄に悩んだ。

echo $a | grep '[02468]$' でまとめて if の条件式になっているのだろうか。どうも素直に頭に入ってこないことばかりだ。