在Bash中粘贴带有数组的单个字符串

时间:2016-07-27 16:59:07

标签: arrays string bash

什么是以下R函数的bash等价物?

vec=4:9
out=paste0("foo_",vec,"_bar")
out

"foo_4_bar" "foo_5_bar" "foo_6_bar" "foo_7_bar" "foo_8_bar" "foo_9_bar"

3 个答案:

答案 0 :(得分:3)

您可以使用声明带有后缀和前缀的数组,然后使用大括号扩展来填充递增的数字:

arr=("foo_" "_bar") # array with suffix and prefix
echo "${arr[0]}"{4..9}"${arr[1]}" # brace expansion

foo_4_bar foo_5_bar foo_6_bar foo_7_bar foo_8_bar foo_9_bar

答案 1 :(得分:2)

您可以使用大括号扩展:

$ echo foo_{4..9}_bar
foo_4_bar foo_5_bar foo_6_bar foo_7_bar foo_8_bar foo_9_bar
$ out=( foo_{4..9}_bar )
$ echo "${out[1]}"
foo_5_bar

答案 2 :(得分:2)

即使你的vec不是通过大括号展开生成的,这也有效:

vec=( {4..9} ) # would work even with vec=( *.txt ) or readarray -t vec <file, etc.
out=( "${vec[@]/#/foo_}" ) # add foo_ prefix
out=( "${out[@]/%/_bar}" ) # add _bar suffix
declare -p out # print resulting array definition

请参阅bash-hackers wiki上的the Parameter Expansion page,特别是“搜索和替换”下的“锚定”部分。