请注意,mapfile提供了一种在每一行读取时进行回调 eval’d 的方法,实际上,您甚至可以告诉它在每一行读取时只调用这个回调; 请看一下 help mapfile以及其中的选项 -C和 -c。(我的观点是,它有点笨重,但有时只要你有简单的事情要做,就可以使用它ーー我真的不明白为什么一开始要实现它!).
现在我要告诉你们为什么用下面的方法:
my_array=( $( my_command) )
当有空格的时候就会破碎:
$ # I'm using this command to test:
$ echo "one two"; echo "three four"
one two
three four
$ # Now I'm going to use the broken method:
$ my_array=( $( echo "one two"; echo "three four" ) )
$ declare -p my_array
declare -a my_array='([0]="one" [1]="two" [2]="three" [3]="four")'
$ # As you can see, the fields are not the lines
$
$ # Now look at the correct method:
$ mapfile -t my_array < <(echo "one two"; echo "three four")
$ declare -p my_array
declare -a my_array='([0]="one two" [1]="three four")'
$ # Good!