Ars*_*nko 4 bash io-redirection quoting command-substitution
我正在尝试while read
语法,但有一点我不明白。
重现该问题的最基本场景如下:一个 bash 脚本a.sh
调用另一个脚本b.sh
并显示由它回显的行:
a.sh
Run Code Online (Sandbox Code Playgroud)#!/bin/bash while read line; do echo "<<$line>>" done <<< `./b.sh`
b.sh
Run Code Online (Sandbox Code Playgroud)#!/bin/bash echo "Hello" echo "World"
运行b.sh
按预期给出:
#!/bin/bash
while read line; do
echo "<<$line>>"
done <<< `./b.sh`
Run Code Online (Sandbox Code Playgroud)
另一方面,当我运行时a.sh
,输出是:
#!/bin/bash
echo "Hello"
echo "World"
Run Code Online (Sandbox Code Playgroud)
虽然我希望它是:
Hello
World
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
来自4.4-alpha 和 4.4-beta 之间的 Bash 变更日志:
[...]
本文档详细介绍了此版本 bash-4.4-beta 与先前版本 bash-4.4-alpha 之间的更改。
[...]
z。 Bash 不再拆分 here-strings 的扩展,正如文档中一直所说的那样。
这对我来说有点含糊不清,但是当时提交给bash
源的任何更改都会产生影响,即在 Bash 4.4 中,命令
while read line; do
printf '<<%s>>\n' "$line"
done <<< $( printf '%s\n' hello world )
Run Code Online (Sandbox Code Playgroud)
会产生
<<hello>>
<<world>>
Run Code Online (Sandbox Code Playgroud)
不是
<<hello world>>
Run Code Online (Sandbox Code Playgroud)
就像在 Bash 4.3 中一样。
归档时间: |
|
查看次数: |
918 次 |
最近记录: |