Bash
為什麼將此處的字元串命令替換視為單行?
我正在嘗試
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>>
我究竟做錯了什麼?
從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 中一樣。