以下の最初のコマンドが最後に印刷される理由を知りたいです。
file=$(printf .tar.gz & printf test)
echo $file
test.tar.gz
期待どおりに出力されます.tar.gztest
。
ベストアンサー1
注文する非同期コマンド保証されておらず、シェルとオペレーティングシステムのスケジューラによって異なります。
簡単なテスト(Mac OSX El Capitalで実行zsh
):
for shell in bash ksh zsh mksh yash dash; do
printf '[%s]\n' "$shell"
"$shell" -c 'file=$(printf .tar.gz & printf test); echo "$file"'
done
[bash]
test.tar.gz
[ksh]
test.tar.gz
[zsh]
.tar.gztest
[mksh]
.tar.gztest
[yash]
test.tar.gz
[dash]
test.tar.gz
私のUbuntu 14.04 VMでは、これらのすべてのシェルが作成されますtest.tar.gz
。