首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Bash脚本在数组(如变量)中搜索值?

如何使用Bash脚本在数组(如变量)中搜索值?
EN

Stack Overflow用户
提问于 2021-12-08 07:21:33
回答 3查看 134关注 0票数 0

我有下面的文字,作为一些命令myscript.sh的输出;

代码语言:javascript
复制
[
    "string-1", 
    "string-2"
]

我将输出存储到一些变量中,如下所示:

代码语言:javascript
复制
myarray=$(myscript.sh)

现在,如果数组中没有字符串value not present,我想回显string-3,类似于下面的代码;

代码语言:javascript
复制
value="string-3"
if [[ ! " ${myarray[*]} " =~ " ${value} " ]]; then
    echo "value not present"
fi

即使存在值,此代码也将输出value not present。怎样才能解决这个问题呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-12-08 14:08:01

把它重写如下:

代码语言:javascript
复制
if [[ ! $myarray =~ $value ]]; then
    echo "value not present"
fi

或者像这样:

代码语言:javascript
复制
[[ $myarray =~ $value ]] || echo "value not present"

那些“破坏”一切。

票数 0
EN

Stack Overflow用户

发布于 2021-12-08 07:44:32

myarray变量是一个字符串,可以使用正则表达式来确定它是否包含指定的子字符串。

代码语言:javascript
复制
myarray=([
    "string-1", 
    "string-2"
])
value="string-3"
if [[ ! "$myarray" =~ .*"$value".* ]]; then
    echo "value not present"
fi
票数 1
EN

Stack Overflow用户

发布于 2021-12-08 07:55:14

输入是JSON数组吗?如果是这样的话,您应该使用一个JSON感知工具,比如jq来处理它。就像这样:

代码语言:javascript
复制
if jq -e --arg value "$value" 'any(. == $value)' <<<"$myarray" >/dev/null; then

说明:--arg value "$value"将shell变量value复制到同名的jq变量中。<<<"$myarray"将该变量的值作为输入传递(因为它不是bash数组,所以[*]不相关)。如果任何数组元素与any(. == $value)匹配,则筛选器true返回$value,否则返回false-e选项告诉jq使用该结果作为其退出状态,>/dev/null丢弃文本输出。因为if使用命令的退出状态作为它的条件,所以这应该是您所需要的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70271296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档