2012-04-29 4 views
3

コマンドループにbash selectステートメントを使用しようとしています。 select文の変数は常に空白です。ここでは、問題を示して簡単なスクリプトです:bash selectステートメントのオプションと一致しません

#!/bin/bash 

select term in one two exit 
do 
    echo you selected $term 
    case $term in 
    one) echo one; break;; 
    two) echo two; break;; 
    exit) echo will exit; return;; 
    esac 
done 

は、ここで私は、このスクリプトを実行すると何が起こるかです:

$ ./test.sh 
1) one 
2) two 
3) exit 
#? one 
you selected 
#? two 
you selected 
#? exit 
you selected 
#? ^D 

誰もが私が間違っているかもしれないものを知っていますか?私はMac OS X 10.7.3です。 /bin/bash --versionはGNU bashバージョン3.2.48(1)-wirey(x86_64-apple-darwin11)

答えて

5

「1」または「2」ではなく「1」または「2」と入力すると動作します。

+0

ああ、ユーザーエラー:)ありがとう! –

6

@jedwardsが即時回答を返しました。あなたは、同じエラーを持つ他のユーザーから身を守るしたい場合は、この

select term in first second exit; do 
    [[ -z $term ]] && casevar=$REPLY || casevar=$term. # or, shorter, casevar=${term:-$REPLY} 
    case $casevar in 
    1|first) echo "the first option"; break ;; 
    2|second) echo "option no. 2"; break ;; 
    3|exit) echo bye; break ;; 
    esac 
done 

ような何かを行うことができ、bashのマニュアルからの注意にこれを:行は標準入力から読み込まれる

。行が表示された単語の1つに対応する の数字で構成される場合、 の値がその単語に設定されます。行が空の場合は、単語とプロンプト が再度表示されます。 EOFが読み取られると、選択コマンドが完了します。任意 他の値を読み取ると、nameがnullに設定されます。読み取られた行は、変数REPLYに として保存されます。

+0

これはうまくいきます。追加情報をありがとう。 –

関連する問題