bash - 在 Bash 中的 IF/Then 语句中确定数组是否有元素
问题描述
我正在尝试确定数组是否在 if/then 语句中具有如下元素:
if [[ -n "$aws_user_group" && -n "${#aws_user_roles[@]}" ]]; then
echo "$aws_user_name,$aws_user_group,"${aws_user_roles[*]}",$aws_key,$aws_account_number" >> "$ofile"
elif [[ -n "$aws_user_group" ]]; then
echo "$aws_user_name,$aws_user_group,,$aws_key,$aws_account_number" >> "$ofile"
fi
问题是,如果数组为空,则在此调试输出中用“0”表示:
[[ -n 0 ]]
并且打印出错误的行。它打印包含“角色”输出的行,但将其留空。
如何在同一个 if/then 语句中检查字符串变量和数学变量?
解决方案
零是元素的数量。使用数学评估。
if (( ${#aws_user_roles[@]} )) # HAS ELEMENTS
then echo has elements
else echo is empty
fi
例子
$: declare -i foo=()
$: if (( ${#foo[@]})); then echo elements; else echo empty; fi
empty
$: foo=( 1 2 3 )
$: if (( ${#foo[@]})); then echo elements; else echo empty; fi
elements
作为旁白...
$: foo=( 1 2 3 )
$: if (( ${#foo})); then echo elements; else echo empty; fi
elements
也可以,但${#foo}
实际上只查看第一个元素的字符串长度,理论上可能会给你一个错误的响应......虽然''
返回 1. 嗯......
您还可以对其他事情进行链式测试 -
if (( ${#var} )) && [[ -e "$var" ]] # both must succeed
这与单线测试相同
ls a && ls b || echo one of these doesn't exist...
推荐阅读
- arrays - Chef - Ruby - 如何从嵌套数组/列表中提取值
- python - Instagram 和硒。如何点击灯箱?
- ms-access-2007 - 如何在 MS-ACCESS 上查询考勤
- c# - 如何将同一列添加到 EF Core 中的所有实体?
- woocommerce - 在 Woocommerce 中测试信用卡支付方式
- svg - 如何调整 svg 图标的大小(使用 href)
- java - 如何编译不同版本的maven web项目并在不同版本中运行
- r - 合并/cbind模型矩阵
- python - 在 Plotly 散点图中按颜色添加图例
- delphi - Unexpected result from Max function in FreePascal