在 Bash 中将默认数组写入变量

l0b*_*0b0 10 bash array

我期待

excludes="${excludes:-( ${default_excludes[@]} )}"
Run Code Online (Sandbox Code Playgroud)

如果$excludes为空,则为数组。不幸的是,后面的东西:-被认为是一个字符串。我是否错过了一些语法扭曲,或者我必须使用笨重的

if [ -z "${excludes:-}" ]
then
    excludes=( "${default_excludes[@]}" )
fi
Run Code Online (Sandbox Code Playgroud)

?

GnP*_*GnP 11

您可以使用以下语法从另一个数组构造一个数组:

arr1=( "${arr2[@]}" )
Run Code Online (Sandbox Code Playgroud)

这可以翻译成这个默认值语法:

arr1=("${arr1[@]:-${arr2[@]}}")
Run Code Online (Sandbox Code Playgroud)

我已经测试了一些边缘情况,例如带有空格或换行符的数组成员,它似乎可以正确处理它们。

  • 如果 arr2 为空,则 arr1 变为一个长度为 1 的数组,其中包含一个空字符串 (3认同)