Bash配列に偽の肯定が含まれています。

Bash配列に偽の肯定が含まれています。

bash配列に特定の値があるかどうかを確認しようとしています。もしそうなら、それについて何かをしてください。それ以外の場合は別のことをしてください。

なぜこれがいつも私に失敗するのか分かりません。

デフォルトでは、2つの別々の値から始まり、区切り文字で連結し、配列を検索してから、文字列全体(区切り記号と両方)が配列要素にある場合は、それを実行して別の操作を実行します。

#!/bin/bash

FNAME="JACK"
LNAME="BLACK"

SEARCHNAME=()
SEARCHNAME+="JACK-BLACK"
SEARCHNAME+="JOHN-JAMES"
SEARCHNAME+="CHRIS-TOPHER"
SEARCHNAME+="JEN-NAY"

NAME="${FNAME}-${LNAME}"

if [[ $NAME == *"${SEARCHNAME[@]}"* ]]; then
    echo "PASSED"
else
    echo "FAILED"
fi

echo "SEARCH IN: ${SEARCHNAME[@]}"
echo "FOR NAME: ${NAME}"

結果:

FAILED
SEARCH IN: JACK-BLACKJOHN-JAMESCHRIS-TOPHERJEN-NAY
FOR NAME: JACK-BLACK

私も試してみましたが、if [[ "${NAME}" == *"${SEARCHNAME[@]}"* ]]違いはありません...ここには非常に明確なものがありませんでした。そして、それが配列を宣言する方法と関係があると思いますか?各配列要素間のスペース不足(配列出力で見ることができます)がワイルドカードの影響を受けないことを願っています。

ベストアンサー1

配列割り当てを変更し、テストを正規表現に変更します。

#!/bin/bash

FNAME="JACK"
LNAME="BLACK"

SEARCHNAME=()
SEARCHNAME+=("JACK-BLACK")
SEARCHNAME+=("JOHN-JAMES")
SEARCHNAME+=("CHRIS-TOPHER")
SEARCHNAME+=("JEN-NAY")

NAME="${FNAME}-${LNAME}"

if [[ "${SEARCHNAME[@]}" =~ $NAME ]]; then
    echo "PASSED"
else
    echo "FAILED"
fi

echo "SEARCH IN: ${SEARCHNAME[@]}"
echo "FOR NAME: ${NAME}"

おすすめ記事