3

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

誰かが私が間違っているかもしれないことを知っていますか?私はMacOSX10.7.3を使用しています。/bin/bash --version表示:GNU bash、バージョン3.2.48(1)-リリース(x86_64-apple-darwin11)

4

2 に答える 2

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つに対応する番号で構成されている場合、nameの値はその単語に設定されます。行が空の場合、単語とプロンプトが再度表示されます。EOFが読み取られると、selectコマンドが完了します。その他の値を読み取ると、nameがnullに設定されます。読み取られた行は変数REPLYに保存されます。

于 2012-04-29T02:49:08.140 に答える
5

スクリプトは、「1」または「2」ではなく「1」または「2」と入力すると機能します。

于 2012-04-29T01:44:44.043 に答える