bash строка в массив и массив в строку - PullRequest
2 голосов
/ 30 июня 2019

Как преобразовать строку в массив символов N и обратно в строку с пробелами?И как мы уберем пробелы?

Например, 123456789 на 2 должно дать 12 34 56 78 9

Ответы [ 4 ]

3 голосов
/ 30 июня 2019
$ 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
3 голосов
/ 30 июня 2019

Звучит так, будто вам вообще не нужен массив, и ваша конечная цель - просто вставить пробелы между группами из двух символов. Если это так, вы можете использовать

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

Это преобразует ваш пример ввода 123456789 в ожидаемый вывод 12 34 56 78 9.

Конечно, вы можете назначить результат переменной как обычно:

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

если нужно, как убрать пробелы?

Я не уверен, какие пробелы вы имеете в виду. Если вы говорите об окончательном результате, не будет ли проще снова использовать исходный ввод вместо обработки выходного результата?
В любом случае вы можете удалить все пробелы из любой строки, используя tr -d ' ' <<< "your string" или подстановку параметров ${yourVariable// /}.

2 голосов
/ 30 июня 2019
  1. Если вам нужно разбить строку на массив, вы можете использовать IFS переменную:
IFS=' '
arr=( )
read -r -a arr <<< "string morestring another"
unset IFS
  1. Для удаления пробелов из строки вы можете использовать разные подходы, один из них:
str="123 123  12312312"
echo ${str// /}
//output: 12312312312312
2 голосов
/ 30 июня 2019

Это показательно для вашего вопроса.

Преобразование строки в массив символов 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...