Bash

“命令替換”(Bash/Dash)中的命令順序不正確

  • January 13, 2022

為什麼在執行替換命令時,執行順序被破壞,如下例所示。首先chmod執行命令,echo 1然後echo 2

echo $(echo 1; echo 2; chmod 444 nonexistent_file)

結果:

chmod: Cannot access 'nonexistent_file': No such file or directory
1 2

執行順序沒有被破壞,輸出順序不是你所期望的。

echo 1echo 2執行,將它們的輸出寫入它們的標準輸出,shell 會累積這些輸出以進行命令替換。然後chmod執行,並將其錯誤消息輸出到標準錯誤,標準錯誤直接進入終端,因此首先出現。最後,外部echo以命令替換的結果“1 2”執行。

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