在字符串数组中插入空格

时间:2016-11-14 21:24:37

标签: arrays string bash whitespace

我有以下数组:

declare -a case=("060610" "080813" "101016" "121219" "141422")

我想生成另一个数组,其中元素的空格大小适当插入:

"06 06 10" "08 08 13" "10 10 16" "12 12 19" "14 14 22"

我直到使用sed单独处理元素:

echo '060610' | sed 's/../& /g'

但是在使用数组时我无法做到这一点。 sed混淆了元素之间的空格,我留下了输出:

echo "${case[@]}" | sed 's/../& /g'

给我:

06 06 10  0 80 81 3  10 10 16  1 21 21 9  14 14 22

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

你需要遍历整个阵列,而不是整个回声,因为当你回应它时你不会得到分组。

declare -a newcase
for c in "${case[@]}"
do
    newcase+=("$(echo "$c" | sed 's/../& /g')")
done

答案 1 :(得分:2)

您可以使用printf '%s\n' "${case[@]}" | sed 's/../& /g'将每个号码放在一个单独的行上,避免出现空间问题:

$ declare -a case=("060610" "080813" "101016" "121219" "141422")

$ printf '%s\n' "${case[@]}" | sed 's/../& /g'
06 06 10
08 08 13
10 10 16
12 12 19
14 14 22

如果您想将其恢复为数组,可以使用mapfile