Bash如何校验空格分隔的多值变量是否全部为SUCCESS值
问题原因
你使用的判断逻辑是完整匹配整个BACKUP_STATUS变量的值是否等于单个SUCCESS字符串,但你的变量实际是多个SUCCESS通过空格拼接的长字符串,二者不相等,所以会始终返回false。
正确实现方案
以下提供几种可直接使用的实现方式:
正则匹配法(仅适用于Bash,写法简洁)
直接判断变量中是否不存在非SUCCESS的独立单词,符合要求则返回成功:[[ ! $BACKUP_STATUS =~ (^| )(?!SUCCESS)([^ ]+)($| ) ]] && echo true || echo false如果你需要校验不通过时直接返回错误,可直接写为:
if [[ $BACKUP_STATUS =~ (^| )(?!SUCCESS)([^ ]+)($| ) ]]; then echo "存在备份失败的任务" exit 1 fi遍历校验法(兼容所有POSIX标准Shell,适用性广)
遍历变量中的每一个单词逐一校验,只要有一个不符合就终止校验返回失败:check_result=0 for backup_item in $BACKUP_STATUS; do if [ "$backup_item" != "SUCCESS" ]; then check_result=1 break fi done # 输出结果 [ $check_result -eq 0 ] && echo true || echo false字符替换法(写法简单,兼容性好)
把变量中所有的SUCCESS全部删除,如果最终剩余内容全为空白字符,说明原变量所有有效内容都是SUCCESS,校验通过:[[ ${BACKUP_STATUS//SUCCESS/} =~ ^[[:space:]]*$ ]] && echo true || echo false
内容的提问来源于stack exchange,提问作者noze_potato
相关产品推荐
相关产品推荐

