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