检查单词(值)是否在以逗号分隔的列表中

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)

G-M*_*ca' 5

标准的技巧是

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)

将失败。