単語(値)がカンマ区切りリストにあることを確認してください。

単語(値)がカンマ区切りリストにあることを確認してください。

以下のコードでは2一致しないはず21ですが、結果は「一致」です。

SOURCE値が内側にあるかどうかを確認できますかLIST

LIST="1,21,3,4"
SOURCE="2"
if echo "$LIST" | grep -q "$SOURCE"; then
  echo "matched";
else
  echo "no match";
fi

答え1

標準技術は

if echo ",$LIST," | grep -q ",$SOURCE,"
then
  echo "matched"
else
  echo "no match"
fi

(またはと言うこともできますgrep -q ",$SOURCE," <<< ",$LIST,")。検索は2一致します21が、検索は,2,一致しません,21,。探している数字が最初または最後の数字$LIST の場合は、始めと終わりにコンマを追加する必要があります。$SOURCE

grep -q ",1," <<< "1,21,3,4"

失敗するでしょう。

答え2

「単語」の使用は、(私に)単語の境界構造を見つけることができるという提案です。

LIST="1,21,3,4"
SOURCE="2"
if echo "$LIST" | grep -q "\\<$SOURCE\\>"; then
  echo "matched";
else
  echo "no match";
fi

答え3

使用awk:

list="1,21,3,4"
source=2

awk -F, -v search="$source" '{ for (i=1;i<=NF;i++) { if ($i==search) {print $i} } }' <<<"$list"

2完全な文字列内で検索しており、21実際には2

文字列全体が常にコンマで区切られている場合は、次のようにすることもできます。

grep -E ',2,|,2$|^2,'

2リストの先頭、中間、または終わりで a を探します。

関連情報