与えられたパラメータが与えられた配列にあるかどうかを確認するには?

与えられたパラメータが与えられた配列にあるかどうかを確認するには?

script.sh次のシェルスクリプトがあります。

names=( jack john jerry)

ユーザーは、次のように最初の引数としてこれら3つの名前のいずれかを入力したいと思います。

./script.sh jack

たとえば、ユーザーが文字を誤って入力した場合

./script.sh kate

これはaを実行しexit、ユーザーにこれら3つのうちの1つだけを入力するように要求します。

どうすればいいですか?

ベストアンサー1

names=(jack john jerry); 
if [[ " "${names[@]}" " == *" "$1" "* ]] ;then 
    echo "$1: ok"
else 
    echo "$1: not recognized. Valid names are:"
    echo "${names[@]/%/,}"
    exit 1
fi

上記のコードはスペースを含まない名前で動作します。
以下の修正バージョンは名前のスペースを処理します。

names=("flash jack" john jerry); 
d=$'\1'   # validation delimiter - value is \x01
valid="${names[@]/%/$d}"
valid="$d${valid//$d /$d}"
if [[ $valid == *$d$1$d* ]] ;then 
    echo "$1: ok"
else 
    echo "$1: not recognized. Valid names are:"
    echo "${names[@]/%/,}"
    exit 1
fi

空白認識バージョンの出力:

flash jack: ok

または

kate: not recognized. Valid names are:
flash jack, john, jerry,

おすすめ記事