Bash

為什麼將此處的字元串命令替換視為單行?

  • February 25, 2018

我正在嘗試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 中一樣。

引用自:https://unix.stackexchange.com/questions/164110