LINUX.ORG.RU

Текст в массив

 , , ,


0

1

Например

text=«Какой то большуший текст|name|file|»

как такую переменную разместить в массив?

array[1]=«Какой то большуший текст» array[2]=«name» array[3]=«file»

ну или хотябы в переменные, например

value=«Какой то большуший текст» name=«name» file=«file»

Главное чтоб к переменным обращаться нормально можно было

#!/bin/bash

text="Какой то большуший текст|name|file|"
IFS="|"
arr=($text)
for((i=0;i<3;i++)); do
  echo "arr[$i]=${arr[$i]}"
done
anonymous
()
man -P"less -p'^\s*Arrays'" bash
Deleted
()
#!/bin/bash

text="Какой то большуший текст|name|file|"
echo $text |
while read -d "|" -r item; do
  echo $item
done
anonymous
()
Ответ на: комментарий от anonymous

Если уж делать через цикл, то хоть по-человечески

unset words
text="Ля ля фа ля | охохо | проснись и пой | и опыт, сын ошибок трудных"

while read words[${#words[@]}]; do :
done < <(echo "$text" | sed -r 's/\|/\n/g' )

for ((i=0; i<${#words[@]}; i++)); do
    echo ${words[$i]};
done

Deleted
()
Ответ на: комментарий от Deleted

боюсь вас разочаровать, но данная конструкция все равно читает посимвольно всю переменную text, может конечно только у меня. ни первый пример, ни второй этим не страдает. первый даже дочерние процессы не создает.

strace -e read ./имя скрипта # проверка на чтение
strace -e open,clone ./имя скрипта # проверка на создание процессов

anonymous
()
Ответ на: комментарий от anonymous

боюсь вас разочаровать, но данная конструкция все равно читает посимвольно всю переменную text

У меня были баги, когда я отправлял $text в while через пайп, но так немного лучше, да. Тем не менее, я не считаю это чем-то страшным.

первый даже дочерние процессы не создает.

А ещё у него захардкоженный лимит на количество элементов в массиве.

Deleted
()
Ответ на: комментарий от Deleted

А ещё у него захардкоженный лимит на количество элементов в массиве.

спасибо, не знал.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.