我有下面的文字,作为一些命令myscript.sh的输出;
[
"string-1",
"string-2"
]我将输出存储到一些变量中,如下所示:
myarray=$(myscript.sh)现在,如果数组中没有字符串value not present,我想回显string-3,类似于下面的代码;
value="string-3"
if [[ ! " ${myarray[*]} " =~ " ${value} " ]]; then
echo "value not present"
fi即使存在值,此代码也将输出value not present。怎样才能解决这个问题呢?
发布于 2021-12-08 14:08:01
把它重写如下:
if [[ ! $myarray =~ $value ]]; then
echo "value not present"
fi或者像这样:
[[ $myarray =~ $value ]] || echo "value not present"那些“破坏”一切。
发布于 2021-12-08 07:44:32
myarray变量是一个字符串,可以使用正则表达式来确定它是否包含指定的子字符串。
myarray=([
"string-1",
"string-2"
])
value="string-3"
if [[ ! "$myarray" =~ .*"$value".* ]]; then
echo "value not present"
fi发布于 2021-12-08 07:55:14
输入是JSON数组吗?如果是这样的话,您应该使用一个JSON感知工具,比如jq来处理它。就像这样:
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使用命令的退出状态作为它的条件,所以这应该是您所需要的。
https://stackoverflow.com/questions/70271296
复制相似问题