我正在尝试将字符串拆分为':'并将其存储在一个数组中,所以看起来像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 identifier
和export: '[0]: not a valid identifier
我是bash的新手。
答案 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]}"
(通常不需要引用作业,但export
,declare
,local
,和类似的,引用更好。
https://www.lukeshu.com/blog/bash-arrays.html是关于bash数组如何工作的好教程。