什么是以下R函数的bash等价物?在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"
什么是以下R函数的bash等价物?在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"
您可以使用后缀,前缀声明数组,然后用括号展开来填充递增的数字:
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
嗯。我的意思是,这是有效的,但它只适用于一个非常特殊的场景(数组通过大括号扩展生成),而不是任何任意数组。 –
@CharlesDuffy:当这不起作用? – sjsam
@sjsam,...当数组中的前缀和后缀连接起来时(R中的'4:9')是由常数锚定的数字范围以外的数组。关于问题的评论,请参阅OP的讨论,即以这种方式限制问题域不是他们的意图。 –
你可以用括号展开:
$ 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
这个工程即使如果您的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,特别是“Search and Replace”下的“Anchoring”部分。
是'vec = 4:9'只是一个例子(其中输入可能真的是任何数组),还是真的是它总是生成为两个常量之间的范围? –
只是一个例子 –
'echo foo_ {4..9} _bar'? – twalberg