我正在尝试while read
句法有件事我不明白。
重现该问题的最基本场景如下:bash 脚本a.sh
调用另一个脚本b.sh
并显示它所回显的行:
a.sh
#!/bin/bash while read line; do echo "<<$line>>" done <<< `./b.sh`
b.sh
#!/bin/bash echo "Hello" echo "World"
运行b.sh
给出了预期的结果:
Hello
World
另一方面,当我运行时a.sh
,输出是:
<<Hello World>>
虽然我期望它是:
<<Hello>>
<<World>>
我究竟做错了什么?
答案1
从4.4-alpha 和 4.4-beta 之间的 Bash 变更日志:
[...]
本文档详细介绍了此版本 bash-4.4-beta 与之前版本 bash-4.4-alpha 之间的更改。
[...]
z。 正如文档一直所说的那样,Bash 不再拆分此处字符串的扩展。
这对我来说有点含糊不清,但无论bash
当时对源代码所做的任何更改都会产生这样的效果:在 Bash 4.4 中,命令
while read line; do
printf '<<%s>>\n' "$line"
done <<< $( printf '%s\n' hello world )
将产生
<<hello>>
<<world>>
不是
<<hello world>>
如 Bash 4.3 中所示。