2017-03-17 43 views
0

我有一个文本文件,它看起来像这样:创建并从文本文件索引的数组

:SomeWord:::SomeOtherWord:::MaybeAnotherWord:: 

假设我不知道有多少“:”是词或间连一句中有多少是,但每个单词都在“:”之后,我想在Linux终端中使用此文本文件,并将2个局部变量设置为找到的第一个和第二个单词。

我试图从文本文件中创建一个数组,然后抓住0和1索引,但它没有像我想象的那样工作。

~# myarray=$(cat mytextfile.txt | tr ":" "\n") 
~# for line in $myarray ; do echo "[$line]"; done 
[SomeWord] 
[SomeOtherWord] 
[MaybeAnotherWord] 

OK,看起来像它的工作,但后来当我试图通过索引抢我得到意想不到的效果..

~# echo ${myarray[0]} 
SomeWord SomeOtherWord MaybeAnotherWord 
~# echo ${myarray[1]} 

~# 

,如果我分裂文件错了,我不知道吗?

回答

2

您没有创建数组,而只是一个普通变量。要创建一个数组,你必须编写()角落找寻再次$()

myarray=($(cat mytextfile.txt | tr ":" "\n")) 

这也可以写成:

myarray=($(tr ":" "\n" < mytextfile.txt)) 
+0

不,它创建一个长度为3的数组试试吧。如果'$()'被引用('“$()”'),那么你会是对的。 – Socowi

+0

我没有引用它。不确定IFS是否导致问题。我在一个新的Bash会话中尝试了你的命令,它工作。编辑你的答案和upvoted。 – codeforester