我有这样的
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从结果中删除空行。