带选项t的样本1:
f(){
mapfile -t aaa < /dev/stdin
echo -e ${aaa[@]}
}
echo -e "a\nb\nc" | f
样品2没有选项t:
f(){
mapfile aaa < /dev/stdin
echo -e ${aaa[@]}
}
echo -e "a\nb\nc" | f
输出相同:
a b c
编辑:
为什么@ cdarke&#39; s和@ heemayl的答案中有两个空格?
echo -e "a\nb\nc" | f2 | od -b
0000000 141 012 040 142 012 040 143 012 012
0000011
然后我尝试了这个:echo -e "a\tb\tc" | f2 | od -b
0000000 141 011 142 011 143 012 012
0000007
并且没有空格。
提前谢谢!答案 0 :(得分:1)
要查看差异引用${aaa[@]}
:
echo -e "${aaa[@]}"
在没有引用的情况下,扩展正在根据IFS
(以及路径名扩展)进行分词。由于元素(字符串)包含换行符,因此这些换行符将进行分词。
示例:强>
$ f() { mapfile -t aaa < /dev/stdin; echo -e "${aaa[@]}" ;}
$ echo -e "a\nb\nc" | f
a b c
$ g() { mapfile aaa < /dev/stdin; echo -e "${aaa[@]}" ;}
$ echo -e "a\nb\nc" | g
a
b
c
答案 1 :(得分:1)
问题在于echo
:
f1(){
mapfile -t aaa < /dev/stdin
echo -e "${aaa[@]}" # note the quotes
}
echo -e "a\nb\nc" | f1
f2(){
mapfile aaa < /dev/stdin
echo -e "${aaa[@]}" # note the quotes
}
echo -e "a\nb\nc" | f2
给出:
a b c
a
b
c
在第二种情况下,没有引号,换行符被视为空格。