3

スクリプトを次のように実行します

./test.sh -c "red blue yellow"
./test.sh -c "red blue"

そして bash では、変数「collor」は「red blue yellow」または「red blue」によって割り当てられます。

echo $collor
red blue yellow

2 つの質問:

A: 「赤」は私にとって重要なパラメーターですが、有効な色に赤が含まれているかどうかはどうすればわかりますか?

if [ red is in color] ; then "my operation"

B: 3 色しかないカラー リストがあります。スクリプトに渡された定義されていない色があるかどうかを確認するにはどうすればよいですか

./test.sh -c "red green yellow"

カラーリストを定義する方法と、プリントを取得するためのチェックを行う方法

Warnings: wrong color is green is passed to script

ありがとう

4

2 に答える 2

1

(A) ワイルドカード文字列比較を使用してある程度処理できます。

if [[ "$color" = *red* ]]; then
    echo 'I am the Red Queen!'
elif [[ "$color" = *white* ]]; then
    echo 'I am the White Queen!'
fi

このアプローチの問題点は、単語の境界をうまく (またはまったく) 処理できないことです。redは最初の条件をトリガーしますが、 と もトリガーしorange-redますbored。さらに、(B) は、この方法で実装するのが困難 (または不可能) になります。

これに対処する最善の方法は、カラー リストをBash 配列に割り当てることです。

COLORS=($color)

for i in "${COLORS[@]}"; do
    if [[ "$i" = "red" ]]; then
        echo 'I am the Red Queen!'
    elif [[ "$i" = "white" ]]; then
        echo 'I am the White Queen!'
    fi
done

次に、ネストされたループを使用して、許可された色を含む別の配列を反復処理し、そこで見つからない入力色を報告できます。

于 2013-10-13T09:29:21.290 に答える
0

A: 「赤」は私にとって重要なパラメーターですが、有効な色に赤が含まれているかどうかはどうすればわかりますか?

あなたは言えた:

if [[ "$2" == *red* ]]; then
  echo "Color red is present ..."
fi

redこの条件は、色がスクリプトへの引数に含まれている場合にのみ真になります ( ./test.sh -c "red blue yellow")。

B: 3 色しかないカラー リストがあります。スクリプトに未定義の色が渡されているかどうかを確認するにはどうすればよいですか

colors=(red blue yellow)       # color list with three colors
IFS=$' ' read -a foo <<< "$2"
echo "${#foo[@]}"
for color in "${foo[@]}"; do
  if [[ "${colors[@]}" != *${color}* ]]; then
    echo incorrect color $color
  fi
done
于 2013-10-13T09:28:41.030 に答える