我理解语法:
foo=${bar:-mydefault}
将foo
设置为$bar
(如果存在),mydefault
(如果不存在)。这适用于简单的标量值。但我无法弄清楚如何为列表设置默认值。我尝试过这样的事情:
foo=${bar[@]:-(my de fault)}
但这不起作用。它是推动我的默认值,如果它存在,它会将${bar[@]}
指定为列表。怎么办呢?
答案 0 :(得分:2)
foo=(...)
中没有数组值这样的东西。 bar
是一种特殊形式的任务,而不是常规任务的特殊RHS。最接近你想要的是首先尝试复制foo
,然后检查是否实际定义了bar
。 (如果foo
为空,则foo
尚未实际定义,但名称 foo=( "${bar[@]}" )
if ! [[ -v foo ]]; then
foo=(my de fault)
fi
上的数组属性已设置。)
foo=( "${bar[@]}" )
请注意,即使bar
也未制作$ bar=([0]=zero [9]=nine)
$ foo=( "${bar[@]}" )
$ declare -p foo bar
declare -a foo=([0]="zero" [1]="nine")
declare -a bar=([0]="zero" [9]="nine")
的完整副本;确切的指数不予保留。
bar
要保留索引,您需要直接在$ foo=()
$ for i in "${!bar[@]}"; do foo[i]=${bar[i]}; done
中迭代它们:
onChange
答案 1 :(得分:-1)
foo=(${bar[@]:-my de fault})
从my de fault
中删除括号,然后将其转换回数组。