Bash
“命令替換”(Bash/Dash)中的命令順序不正確
為什麼在執行替換命令時,執行順序被破壞,如下例所示。首先
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 1
並echo 2
執行,將它們的輸出寫入它們的標準輸出,shell 會累積這些輸出以進行命令替換。然後chmod
執行,並將其錯誤消息輸出到標準錯誤,標準錯誤直接進入終端,因此首先出現。最後,外部echo
以命令替換的結果“1 2”執行。