bash字符串到数组和数组到字符串

时间:2019-06-30 18:52:15

标签: arrays string bash

如何将字符串转换为N个字符数组并转换回带空格的字符串? 以及如何删除空格?

例如123456789成2的应该给12 34 56 78 9

4 个答案:

答案 0 :(得分:3)

听起来像根本不需要数组,而最终目标只是在两个字符的组之间插入空格。如果是这样,您可以使用

 sed 's/../& /g' <<< "your string here"

这会将示例输入123456789转换为预期的输出12 34 56 78 9

当然,您可以像往常一样将结果分配给变量:

yourVariable="$(sed 's/../& /g' <<< "your string here")"
  

如果需要,我们如何删除空格?

我不确定您是指哪个空格。如果您要说的是最终结果,那么使用原始输入而不是再次处理输出会更容易吗?
无论如何,您可以使用tr -d ' ' <<< "your string"或参数替换${yourVariable// /}从任何字符串中删除所有空格。

答案 1 :(得分:3)

$ str='123456789'

$ arr=( $(printf '%s\n' "$str" | sed 's/../& /g') )
$ declare -p arr
declare -a arr=([0]="12" [1]="34" [2]="56" [3]="78" [4]="9")

$ str="${arr[*]}"
$ echo "$str"
12 34 56 78 9

$ str="${str// }"
$ echo "$str"
123456789

$ str=$(printf "%s" "${arr[@]}")
$ echo "$str"
123456789

答案 2 :(得分:2)

这将说明您的问题。

将字符串转换为N个字符数组:

string="0123456789abcdefghijklmnopqrstuvwxyz"
number_max_of_char_per_set=4
increment_by=$number_max_of_char_per_set

for i in `seq 0 $increment_by ${#string}`
#for i in $(seq 0 ${#string})
    do array[$i]=${string:$i:number_max_of_char_per_set}
done

...返回带空格的字符串:

string_new=${array[@]}

echo "zero element of array is [${array[0]}]"
echo "entire array is [${array[@]}]"
echo $string_new

删除空格:

string_new=${string_new//[[:space:]]/}
echo $string_new

答案 3 :(得分:2)

  1. 如果需要将字符串拆分为数组,可以使用IFS变量:
IFS=' '
arr=( )
read -r -a arr <<< "string morestring another"
unset IFS
  1. 要从字符串中删除空格,可以使用不同的方法,其中之一是:
str="123 123  12312312"
echo ${str// /}
//output: 12312312312312