如何使用此模式将bash数组更改为字符串?假设我有arr=(a b c d)
,我想更改为这种模式CCD_ 2之间具有空白。
PS-I找到了这个模式'a'+'b'+'c'+'d'
,但不确定如何将" + "
而不仅仅是"+"
放在两者之间。
在纯bash
中,在不使用外部命令和不创建子shell的情况下,使用bash
内置的printf
的带有-v
选项的隐式循环(将输出分配给变量,而不是打印它(:
printf -v str " + '%s'" "${arr[@]}"
str=${str:3} # to strip off leading ' + '
echo "$str"
这也适用于包含空白字符的数组元素(尝试使用arr=(a b c d "x y")
(。此解决方案假定arr
不是一个空数组。
像这样:
#!/bin/bash
arr=(a b c d)
str="${arr[@]}"
str=${str// / + } # Parameter Expansion
sed "s/[a-z]/'&'/g" <<< "$str"
输出
'a' + 'b' + 'c' + 'd'
检查
请参阅:http://mywiki.wooledge.org/BashFAQ/073以及";"参数扩展";在男人狂欢中。另请参阅http://wiki.bash-hackers.org/syntax/pe.
这里有一个纯Bash版本,它也容忍arr
成员中的空白。
arr=(a b c d 'e f' 'g h')
aux=("${arr[@]/#/ '}") # add prefix " '"
aux=("${aux[@]/%/' }") # add suffix "' "
str="$(IFS=+ # join with "+"
printf '%s' "${aux[*]}")"
str="${str:1:${#str} - 2}" # trim spaces
printf '%sn' "$str"