首页 > 解决方案 > Bash IF 检查确切的数字是否在列表中

问题描述

我想检查数字是否在列表中,但 23369 与 2336953 匹配。我想知道在 bash 中使用 IF 仅匹配确切数字。

cgroup_uid="1251243 2007297 2336953 695212 834248 23369"
run_uid="1251243 2007297 2336953 695212 834248"
echo $cgroup_uid
echo $run_uid

for i in $cgroup_uid;do
if [[ $run_uid =~ $i ]]; then
    echo "contains $i"
fi
done

我会很感激任何建议。

标签: bashif-statement

解决方案


您要查找两个列表中的元素:

comm -12 <(<<<"$cgroup_uid" tr ' ' '\n' | sort) <(<<<"$run_uid" tr ' ' '\n' | sort)

<<<"$cgroup_uid"输出带有换行符的变量。将tr ' ' '\n'用换行符替换每个空格。然后| sort将对数字进行排序。替代文件名,其中<( ... )包含命令的重定向输出。comm -12打印出现在两个文件中的行。

对于您如何尝试这样做,为了进行比较,我会使用以下grep单词grep -w

if grep -w "$i" <<<"$run_id"; then

推荐阅读