为什么我不能使用 read -a 将字符串分解为单词?

为什么我不能使用 read -a 将字符串分解为单词?

我有一个示例输入文件,in其内容如下:

m@m-X555LJ:~/wtfdir$ cat in
asdf1 jkl1
asdf2 jkl2
asdf3 jkl3

我现在执行:

m@m-X555LJ:~/wtfdir$ mapfile < ./in

正如预期的那样,该变量MAPFILE现在是一个将文件in分成几行的数组:

m@m-X555LJ:~/wtfdir$ echo ${MAPFILE[0]}
asdf1 jkl1
m@m-X555LJ:~/wtfdir$ echo ${MAPFILE[1]}
asdf2 jkl2

所以现在我想把第一行分解成单词。 AFAIKread -a arrname从标准输入中读取一行,将其分解为单词并将结果存储在名为 的数组中arrname。所以我输入:

m@m-X555LJ:~/wtfdir$ echo ${MAPFILE[0]} | read -a words

在我的心智模型中,应该发生这样的情况:将(即)echo ${MAPFILE[0]}的第一行回显到标准输出中,但这会通过管道输送到 的标准输入中,因此应该读取这一行并将其拆分为单词并将结果存储在数组称为.MAPFILEasdf1 jkl1read -a wordsreadwords

但遗憾的是,这并没有发生:

m@m-X555LJ:~/wtfdir$ echo ${words[0]}

m@m-X555LJ:~/wtfdir$

是的。echo ${words[0]}没有打印任何内容,而我希望它会打印asdf1

为什么会发生这种情况?而我的错误又在哪里呢?以及如何让它发挥作用?

答案1

这会做你想做的

read -a words <<< ${MAPFILE[0]}

并且根据这个, http://wiki.bash-hackers.org/commands/builtin/read 你应该总是使用“-r”,即

read -r -a words <<< ${MAPFILE[0]}

$ echo ${words[0]}
asdf1

相关内容