将数组bash转换为字符串模式



如何使用此模式将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"

最新更新