Разделить строку на массив Shellscript Как разбить строку на массив в оболочке script? Я попытался с IFS='delimiter', и он работает с циклами (for, while), но мне нужен массив из этой строки. Как я могу создать массив из строки? Спасибо! Ответ 1 str=a:b:c:d:e IFS=: ary=($str) for key in "${!ary[@]}"; do echo "$key ${ary[$key]}"; done выходы 0 a 1 b 2 c 3 d 4 e Другая (bash) техника: str=a:b:c:d:e IFS=: read -ra ary <<<"$str" Это ограничивает изменение переменной IFS только в течение продолжительности команды чтения. Ответ 2 #!/bin/bash str=a:b:c:d:e arr=(${str//:/ }) ВЫВОД: echo ${arr[@]} a b c d e Ответ 3 Найдите решение, которое не требует изменения IFS или цикла: str=a:b:c:d:e arr=(`echo $str | cut -d ":" --output-delimiter=" " -f 1-`) выход: echo ${arr[@]} a b c d e Ответ 4 Объединив ответы выше в то, что сработало для меня set -- `echo $PATH|cut -d':' --output-delimiter=" " -f 1-`; for i in "[email protected]"; do echo $i; done дает # set -- `echo $PATH|cut -d':' --output-delimiter=" " -f 1-`; for i in "[email protected]"; do echo $i; done /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin #
Ответ 1 str=a:b:c:d:e IFS=: ary=($str) for key in "${!ary[@]}"; do echo "$key ${ary[$key]}"; done выходы 0 a 1 b 2 c 3 d 4 e Другая (bash) техника: str=a:b:c:d:e IFS=: read -ra ary <<<"$str" Это ограничивает изменение переменной IFS только в течение продолжительности команды чтения.
Ответ 3 Найдите решение, которое не требует изменения IFS или цикла: str=a:b:c:d:e arr=(`echo $str | cut -d ":" --output-delimiter=" " -f 1-`) выход: echo ${arr[@]} a b c d e
Ответ 4 Объединив ответы выше в то, что сработало для меня set -- `echo $PATH|cut -d':' --output-delimiter=" " -f 1-`; for i in "[email protected]"; do echo $i; done дает # set -- `echo $PATH|cut -d':' --output-delimiter=" " -f 1-`; for i in "[email protected]"; do echo $i; done /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin #