21

如何在 shell 脚本中将字符串拆分为数组?

我试过了IFS='delimiter',它适用于循环(for, while),但我需要该字符串中的一个数组。

如何从字符串中创建一个数组?

谢谢!

4

4 回答 4

32
str=a:b:c:d:e
set -f
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 变量的更改仅在读取命令期间进行。

于 2012-04-12T19:26:14.013 回答
23
#!/bin/bash

str=a:b:c:d:e
arr=(${str//:/ })

输出:

echo ${arr[@]}
a b c d e
于 2014-04-18T15:05:43.317 回答
7

找到了不需要更改 IFS 或循环的解决方案:

str=a:b:c:d:e
arr=(`echo $str | cut -d ":"  --output-delimiter=" " -f 1-`)

输出:

echo ${arr[@]}
a b c d e
于 2012-12-09T02:58:10.080 回答
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
# 
于 2017-07-09T14:52:09.540 回答