检查 Bash 列表中是否存在变量

新手上路,请多包涵

我正在尝试用 bash 编写一个脚本来检查用户输入的有效性。

我想将输入(比如变量 x )与有效值列表匹配。

我现在想出的是:

 for item in $list
do
    if [ "$x" == "$item" ]; then
        echo "In the list"
        exit
    fi
done

我的问题是是否有更简单的方法可以做到这一点,

对于大多数编程语言,类似 list.contains(x) 的东西。

说清单是:

 list="11 22 33"

我的代码将仅针对这些值回显消息,因为 list 被视为数组而不是字符串,所有字符串操作都将验证 1 而我希望它失败。

原文由 Ofir Farchy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 548
2 个回答
[[ $list =~ (^|[[:space:]])$x($|[[:space:]]) ]] && echo 'yes' || echo 'no'

或创建一个函数:

 contains() {
    [[ $1 =~ (^|[[:space:]])$2($|[[:space:]]) ]] && exit(0) || exit(1)
}

使用它:

 contains aList anItem
echo $? # 0: match, 1: failed

原文由 chemila 发布,翻译遵循 CC BY-SA 3.0 许可协议

怎么样

echo $list | grep -w -q $x

您可以检查输出或上述行的 $? 来做出决定。

grep -w 检查整个单词模式。添加 -q 防止回显列表。

原文由 Kent 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题