用冒号分割字符串

时间:2017-07-27 21:09:17

标签: arrays bash unix

我正在尝试将字符串拆分为':'并将其存储在一个数组中,所以看起来像a:b:c:d:x:y:z将存储在一个数组中,该数组将a,b,c,d,x,y,z保存为元素。

我写的是

IFS = ':' read - r -a ARR <<< "$INFO" 

其中INFO是一个字符串,它是从包含上述格式的多个字符串的文件中读入的。

我收到错误说&#34; IFS:找不到命令&#34;。

我正在以这种方式阅读它们:

while read INFO

最后,当我尝试将数组中的第一个元素分配给变量时,我收到一个错误:

export NAME = $INFO[0] 

我在这里遇到的两个错误是export: '=' not a valid identifierexport: '[0]: not a valid identifier

我是bash的新手。

2 个答案:

答案 0 :(得分:3)

这里的基本问题是您的代码在不允许的地方包含空格。例如,以下是非常精细的语法(尽管它不符合POSIX conventions on variable naming,它建议将小写字符用于应用程序定义的名称):

info_string='a:b:c:d:x:y:z'
IFS=: read -r -a info_array <<< "$info_string" 

同样,在取消引用时,您需要花括号,并且(再次)不能在=周围放置空格:

name=${info_array[0]}

答案 1 :(得分:1)

这有效:

s=a:b:c:d #sample string
IFS=:
a=( $s ) #array
printf "'%s' " "${a[@]}" #prints 'a' 'b' 'c' 'd' 

获取数组中第n项的语法是

${array_name[$index]}

(需要curlies),因此您需要export NAME="${INFO[0]}"(通常不需要引用作业,但exportdeclarelocal ,和类似的,引用更好。

https://www.lukeshu.com/blog/bash-arrays.html是关于bash数组如何工作的好教程。