如何使用bash查找长度或检查方括号中的字符串列表是否为空



我有这样的

VIEWERS=[]
EDITORS=[]
ADMINS='["abc@email.com","xyz@email.com"]'

然后将其作为列表传递到.yaml文件我想添加一个检查,以确保如果三个都没有设置,那么终止并且不在上移动

然而,我不知道如何通过bash检查这些字符串的列表是否为空。正确的语法是什么。由于.aml限制,我不能使用圆括号

这里有两个问题。看起来您想要定义数组。这是这样做的:

VIEWERS=() or VIEWERS=(abc@email.com)

一旦定义了它们,您就可以检查这些数组是否都是空的,如下所示:


VIEWERS=()
EDITORS=()
#ADMINS=()
ADMINS=(abc@email.com bcd@email.com)

if [ ${#VIEWERS[@]} -eq 0 ] && [ ${#EDITORS[@]} -eq 0 ] && [ ${#ADMINS[@]} -eq 0 ] ; then
echo "all empty arrays"
else
echo "non-empty array"
fi

如果运行以上操作,您将得到:non-nempty数组,因为ADMIN不是空的。

但是,如果注释掉第二行ADMIN并取消注释第一行ADMIN,则会得到:all empty arrays。

希望这能有所帮助。

将它们与字符串"[]"进行比较应该很简单。请注意,由于任何包含[]的内容在shell中看起来都像是一个文件名通配符表达式,因此需要使用适当的引号来防止它"有用"地将它们变成匹配文件名的列表。这意味着变量引用周围有双引号,文字周围可能有单引号。此外,我建议使用小写或混合大小写的变量名,以避免和许多具有特殊含义/函数的全大写名称发生冲突。这样的东西:

viewers='[]'
editors='[]'
admins='["abc@email.com","xyz@email.com"]'
if [ "$viewers" = '[]' ] && [ "$editors" = '[]' ] && [ "$admins" = '[]' ]; then
echo "They're all empty"
else
echo "At least one array has contents"
fi

不,我不想使用圆括号,因为我必须将其作为方括号内的内容传递给我的kubernetes部署有没有办法用这种格式做到这一点?

ADMINS='[]'

我会这样尝试:

cat infile | cut -d"]" -f1 | cut -d"[" -f2 | sed -e /^$/d

(*注意:我不在乎,为了可读性,我有时喜欢从cat开始。(

首先,我们用cat输入,然后在delimeter"]"之前剪切字段,然后在"["之后剪切剩余的位。最后,我们放入sed行,以删除剪切操作中null结果返回的空行。

*编辑:

在这里的线程中扫描您的孤立评论后。。。看起来你可能想保留括号。在将来显示您想要的输出imho会很有帮助。也许这样可以吗?

cat infile| cut -d"=" -f2 | sed 's/[[]]//g' | sed -e /^$/d  

首先,我们在文件中读取。。。然后在"="后面剪切,然后使用sed,删除所有带有空括号的结果。最后用另一个sed从结果中删除空行。

最新更新