bash - 将 bash 数组扩展为花括号语法

标签 bash

获取 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

你不需要 evalprintf

像这样,您可以安全地构建数组:

$ 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/

相关文章:

bash - $# 和 ${#@} 的区别

bash - sed-style 用随机字母替换字母,用随机数替换数字

ios - shell 脚本 iOS 中的 xcodebuild 命令

bash - ConEmu + Ubuntu Bash : How to open new tab in current directory

c - 输出重定向产生空文件

linux - 无法统计 mv,未找到文件

bash - 使用 `>' 重定向运算符时,意外标记 '&>>' 附近出现语法错误

bash - 为什么 compgen 需要在这里转义?

bash - 编写跨平台 shell 脚本的最佳方法是什么

linux - 统计bash中可执行文件的数量