Ansatzの備忘録

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

シェルワンライナー160本ノック問題12

問題12 変数の読み込み

次の仕様を満たすシェルスクリプトを作る問題だった:

・標準入力あるいは引数から数字を受け取ったら数字を2倍にして返す

・標準入力と引数両方があった場合、引数を優先する

シェルスクリプトで引数を受け取るには $1 などの位置パラメータを使うという話は練習問題の解説で出てきていたのだが完全にスルーしてしまっていた。man bash の中を見て回ったがどこにそういう話が書いてあるのかはわからない。set の解説に近いことが書いてあったがそれをそのまま一般化してよいものなのか。寝不足も相まって今日は大変出来が悪い(いつもこんな感じか)。

別解について少しメモしておく。${1:-$(cat)} と書くことで $1 の変数が空の場合 $1 が $(cat) で置き換えられる。このようにコマンドを書いておくとシェルスクリプトに入力された文字列がこのコマンドに渡される。今は cat と書いてあるので渡された文字列がそのままここに現れる。