Как разбить строку на массив в сценарии оболочки?Разделить строку на массив Shellscript
Я пробовал с IFS='delimiter'
и работает с циклами (for, while)
, но мне нужен массив из этой строки.
Как я могу создать массив из строки?
Спасибо!
Как разбить строку на массив в сценарии оболочки?Разделить строку на массив Shellscript
Я пробовал с IFS='delimiter'
и работает с циклами (for, while)
, но мне нужен массив из этой строки.
Как я могу создать массив из строки?
Спасибо!
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
другой (Баш) технике:
str=a:b:c:d:e
IFS=: read -ra ary <<<"$str"
Это ограничивает изменение переменной IFS только на время выполнения команды чтения.
Найдено решение, которое не требует изменения IFS или цикл:
str=a:b:c:d:e
arr=(`echo $str | cut -d ":" --output-delimiter=" " -f 1-`)
выход:
echo ${arr[@]}
a b c d e
это не работает ... попробуйте сделать эхо $ {arr [1]} – mhstnsc
#!/bin/bash
str=a:b:c:d:e
arr=(${str//:/ })
ВЫХОД:
echo ${arr[@]}
a b c d e
Объединяя ответы выше в нечто, что сработало f или меня
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
#
Использование $ PATH для тестовой строки - приятное прикосновение, но: слишком сложно, и как это отличается от, например, [zzk's ответить] (https://stackoverflow.com/a/13784224/3789665)? – greybeard
@greybeard tl; dr Это не так :) - Я обнаружил, что ответ zzk не совсем сработал для меня, поэтому настроил его на 'set --', а затем сопоставил полезный материал из нескольких приведенных ответов. Это было для моих собственных целей, но и поделиться им, если у других была такая же проблема. –
FWIW Мне нужно было выполнить несколько тестов против всех папок, перечисленных в пути - в основном для аудита по вопросам эскалации привилегий. –
Это не работает. Сообщение об ошибке означает «ожидаемое» («в строке, где это ary = ($ str)). –
Это, в частности, синтаксис bash. Какую оболочку вы используете? Если у вас есть сценарий' #!/Bin/sh', измените на '#!/bin/bash' –
Я изменил это, но сообщение об ошибке не истечет. –