如何为bash变量指定默认列表值?

时间:2018-03-25 21:34:56

标签: arrays bash

我理解语法:

foo=${bar:-mydefault}

foo设置为$bar(如果存在),mydefault(如果不存在)。这适用于简单的标量值。但我无法弄清楚如何为列表设置默认值。我尝试过这样的事情:

foo=${bar[@]:-(my de fault)}

但这不起作用。它是推动我的默认值,如果它存在,它会将${bar[@]}指定为列表。怎么办呢?

2 个答案:

答案 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中删除括号,然后将其转换回数组。