Разделить строку на массив 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
#