在下面的代码中,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
您对“word”的使用(对我来说)是建议您可以使用 grep 的单词边界结构:
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 。