获取 bash 数组变量的好方法是什么:
lst=(a b c)
并将其转换为花括号语法,这样它给出的语句等效于:
$ echo foo{a,b,c}
fooa foob fooc
?自然地,我希望用 lst
的扩展替换花括号。在我的具体情况下,不可能(或者更确切地说,非常难看)使用 for
循环。
到目前为止我最接近的是:
$ lst=(a b c); echo foo${lst[@]}
fooa b c
最佳答案
回想一下,如果 ary
是一个数组,那么 ${ary[@]/#/foo}
的扩展就是 ary
,每个字段前面都有 foo
。同样,${ary[@]/%/foo}
将 foo
附加到每个字段。看:
$ lst=( a b c )
$ echo "${lst[@]/#/foo}"
fooa foob fooc
$ echo "${lst[@]/%/foo}"
afoo bfoo cfoo
你不需要 eval
或 printf
。
像这样,您可以安全地构建数组:
$ lst=( a 'field with space' b )
$ foolst=( "${lst[@]/#/foo}" )
$ declare -p foolst
declare -a foolst='([0]="fooa" [1]="foofield with space" [2]="foob")'
关于bash - 将 bash 数组扩展为花括号语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27346410/