如何在shell脚本中将字符串拆分为数组?
我尝试使用IFS='delimiter'
,它适用于循环(for, while)
,但我需要来自该字符串的数组。
如何从字符串中创建数组?
谢谢!
答案 0 :(得分:22)
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变量的更改。
答案 1 :(得分:20)
#!/bin/bash
str=a:b:c:d:e
arr=(${str//:/ })
输出:
echo ${arr[@]}
a b c d e
答案 2 :(得分:7)
找到一个不需要更改IFS或循环的解决方案:
str=a:b:c:d:e
arr=(`echo $str | cut -d ":" --output-delimiter=" " -f 1-`)
输出:
echo ${arr[@]}
a b c d e
答案 3 :(得分:1)
将上面的答案组合成适合我的东西
set -- `echo $PATH|cut -d':' --output-delimiter=" " -f 1-`; for i in "$@"; do echo $i; done
给出
# set -- `echo $PATH|cut -d':' --output-delimiter=" " -f 1-`; for i in "$@"; do echo $i; done
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
#