select - 選択肢から変数に代入してコマンドを実行する

スポンサーリンク

selectコマンドは組み込みコマンドで、ユーザに選択を問うような条件分岐に利用できます。選択肢は数字を入力することで選択することができ、selectコマンドはその選択肢を変数に代入してコマンドを実行していきます。

また、選択から抜けるためには組み込みコマンドであるbreakコマンドを利用します。

スポンサーリンク

selectの構文

selectの構文

 

name:変数
words:選択肢
commands:実行していくコマンド

 

 

 

selectの利用例

単語から選択

selectコマンドはforコマンドと似たような構文で記述します。selectコマンドを用いれば、ユーザに選択肢を番号で問い、選ばれた選択肢の値を変数に代入して処理を実行することができます。

selectコマンドの処理は、ユーザからEOFが入力されるか、breakコマンドが実行されるまで終了せずに、何度もユーザに入力を問い続けて処理を行っていきます。

また、選択肢以外の番号を選択した場合は変数にnullがセットされます。

test.sh

コマンド例と実行結果

selectコマンドの中でbreakコマンドがない場合は、処理が実行された後でも処理から抜けることなく、再び選択肢が現れます。
終了する場合は、Ctrl+C等でプログラムを終了するといいでしょう。また、selectコマンドはEOFが読み込まれると処理が終了するので、Ctrl+DでEOFを送って終了することもできます。
また、下のコマンド例ではCtrl+Dでselectコマンドの処理を抜けています。
test-nobreak.sh

コマンド例と実行結果

 

 

カレントディレクトリのファイルから選択

*や?,[]のような文字を用いれば、パターンマッチでファイル名を展開できます。このようなパターンマッチを用いれば、selectコマンドでファイルを列挙しなくてもファイルを選択肢に含めることができます。

例ではカレントディレクトリの全てのファイルを展開します。

test2.sh

コマンド例と実行結果

 

 

 

引数から選択

selectコマンドのinの句を省力すると、$1,$2,$3のような位置パラメータをすべてリストします。これは、$@をin句に記述したような働きを意味します。
つまり、コマンドの記述で表現するならば、

と等価な処理になります。

test3.sh

コマンド例と実行結果

 

 

 

選択を入力するプロンプトの文字列を変更

selectコマンドの入力するプロンプトの文字列を変更するには変数PS3を用いれば、変更することができます。

test4.sh

コマンド例と実行結果

 

 

 

入力した行の取得

selectコマンドでユーザが入力した行は、変数REPLYに保存されます。その変数を用いれば、ユーザが入力した行を利用することができます。

test5.sh

コマンド例と実行結果

 

 

 

参考

GNU Bash manual