Bash:如何根据分隔符将字符串分解为数组元素

时间:2015-07-13 10:27:03

标签: arrays bash shell unix

我已经阅读并尝试了不同的方法(例如IFS,AWK,SED),如何标记这种字符串:

data|date|token1|token2|process_job.sh Y

我想使用' |' 分隔它并访问标记化的字符串,如下所示:

  • arr [0]期望值是数据
  • arr [1]预期值为日期
  • arr [2]期望值为token1
  • arr [3]期望值为token2
  • arr [4]期望值为process_job.sh Y

问题:

当我尝试访问arr [4]时,我总是得到 process_job.sh 而不是 process_job.sh Y

对我们有什么想法吗?非常感谢你

2 个答案:

答案 0 :(得分:2)

您可以使用read

# original string
s='data|date|token1|token2|process_job.sh Y'

# read into an array using IFS=|
IFS='|' read -ra arr <<< "$s"

# check array values
declare -p arr
declare -a arr='([0]="data" [1]="date" [2]="token1" [3]="token2" [4]="process_job.sh Y")'

答案 1 :(得分:1)

这应该这样做:

s="data|date|token1|token2|process_job.sh Y"
IFS="|" arr=($s)
echo "${arr[0]}"

输出:

data