-1

Hi=("Hi" "Hello" "Hey")には可能な入力があります。単語の間にコンマを追加しようとしましたが、それも機能しません。hihello、またはheyが入力された場合、「こんにちは」とエコーする必要があります。現在、Hiのみが動作します。私が探しているのは、単語の「同義語」を作成する方法だと思います。ある単語を別の単語に置き換える能力。

    clear; echo
    shopt -s nocasematch
    echo; read -p "    > " TextInput

    Hi=("Hi" "Hello" "Hey")

     if [[ "$TextInput" == $Hi ]]; then
    clear; echo; echo
    echo -e "    >> Hi"
    echo

     else
    clear; echo; echo
    echo -e "    >> Error"
    echo
    fi

私は私が使用できることを知っています

     if [[ "$TextInput" == "Hi" ]] || [[ "$TextInput" == "Hello" ]] || [[ "$TextInput" == "Hey" ]]; then

しかし、それは長くなりすぎます。

4

4 に答える 4

1

この変種を見てください:

TextInput="Hello"
Hi=("Hi" "Hello" "Hey")

flag=0

for myhi in ${Hi[@]}; do
    if [[ "$TextInput" == "$myhi" ]]; then
        flag=1
        break
    fi
done

if [[ $flag == 1 ]]; then
    echo "Hi there!"
else
    echo "No Hi!"
fi

問題は、フラグ + for ループを使用することです。フラグが設定されている (=1) 場合、これは配列TextInput内の何かと等しくなります。Hi

于 2014-08-10T22:39:08.350 に答える
0

必要に応じて、スイッチを使用することもできます。

case "$input" in
  "Hi"|"He"*)
    echo Hello
    ;;
  *)
    echo Error
    ;;
  esac

これにより、パターンも指定できます。

于 2014-08-10T23:19:04.853 に答える
0

bash のパターン マッチングの使用:

$ Hi=(Hi Hello Hey)
$ input=foo
$ if (IFS=:; [[ ":${Hi[*]}:" == *:"$input":* ]]); then echo Y; else echo N; fi
N
$ input=Hey
$ if (IFS=:; [[ ":${Hi[*]}:" == *:"$input":* ]]); then echo Y; else echo N; fi
Y

ここでは括弧を使用してサブシェルを生成しているため、IFS 変数を変更しても現在のシェルには影響しません。

于 2014-08-11T00:09:17.843 に答える