2017-03-27 11 views
2

ユーザーに番号0-3を入力させてテストしたいとします。最も一般的な方法があるように思わ:[[]]コマンドを使用して式の形式を変換する

[[ $var =~ ^[0-3]$ ]] 

しかし、どのようにあなたがこれを使用します。

test expression 

私の最初の試みは、例えば、正しく評価しません。

read -p "Enter selection [0-3] > " 
if test $REPLY == '^[0-3]$' ; then 
... 

それだけで偽としてif文を評価します。

+2

'test'コマンドは正規表現をサポートしていません。代わりに 'expr'を使用してください:http://stackoverflow.com/questions/7159441/bash-scripting-regular-expressions – ymonad

+0

' test "$ var" = 0 ||テスト "$ var" = 1 ||テスト "$ var" = 2 ||テスト "$ var" = 3 && echo okay' – Cyrus

答えて

0

testは、[ ]構造に相当しますが、拡張バージョンである[[ ]]には該当しません。正規表現=~は拡張テストでのみ利用可能ですので、単純なtestまたは[ ]の場合は正規表現評価を他の場所から引き出す必要があります。

修正はgrepです。このパイプラインはキャッチし、試合を出力します:

echo "$REPLY" | grep '^[0-3]$' 

文字列が空であれば積極的に評価された文字列でtestを使用します。これら二つの比較:

test "" && echo ok 

test "a" && echo ok 

これを知って、それは両方の要素からの化合物のテストを構築するために、今は簡単です。

test "$(echo "$REPLY" | grep '^[0-3]$')" 

そして、これはスクリプトに適用できます。

read -p "Enter selection [0-3] > " 
if test "$(echo "$REPLY" | grep '^[0-3]$')"; then 
    ... 
fi 
+0

クール!これは私が探していたものです。ありがとう。 –

+0

@ShawnZamperiniあなたは私の答えを受け入れることができます。 – tomasz

0

あなたはこのようバッシュで正規表現を使用することができます。

echo -n "Your answer> " 
read REPLY 
if [[ $REPLY =~ ^[0-9]+$ ]]; then 
    echo Numeric 
else 
    echo Non-numeric 
fi 

をポストUsing Bash's regular expressionsを確認してください。

関連する問題