use*_*814 2 shell-script pattern-matching
在下面的代码中,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
Run Code Online (Sandbox Code Playgroud)
标准的技巧是
if echo ",$LIST," | grep -q ",$SOURCE,"
then
echo "matched"
else
echo "no match"
fi
Run Code Online (Sandbox Code Playgroud)
(或者你可以说grep -q ",$SOURCE," <<< ",$LIST,"
)。搜索2
将匹配21
,但搜索,2,
将不匹配,21,
。我们需要在开头和结尾加上逗号,$LIST
以防$SOURCE
我们要查找的数字是第一个或最后一个数字;例如,
grep -q ",1," <<< "1,21,3,4"
Run Code Online (Sandbox Code Playgroud)
将失败。