以下のコードでは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 を探します。