bashとzshの&&と&の優先順位

bashとzshの&&と&の優先順位

回答この問題bash私はとの動作の間に非常に興味深く微妙な違いを見つけましたzsh

存在するbash

romano@RRyS:~$ pwd
/home/romano
romano@RRyS:~$ alias x="cd /bin && ./echo A >/dev/null  &"
romano@RRyS:~$ x
[1] 16611
romano@RRyS:~$ pwd
/home/romano

ご覧のとおり、エイリアスの実行はxサブシェルで実行されるため、現在のディレクトリは変更されません。

次の国にはありませんzsh

[romano:~] % pwd
/home/romano
[romano:~] % alias x="cd /bin && ./echo A >/dev/null &"
[romano:~] % x
[1] 16744
[1]  + 16744 done       ./echo A >/dev/null                                    
1& [romano:/bin] % pwd
/bin
[romano:/bin] % 

ここでディレクトリが変更されました。

&inのbash優先順位がinと異なるようですzsh。 ---私の言葉は、コマンドは次のように読み込まれているようです。

(cd /tmp && echo A) & 

bashのように

cd /tmp && (echo A &) 

存在するzsh。これは正しいですか、それとも他の行動の原因が違うのでしょうか?

ベストアンサー1

明確で文書化された行動zshmisc

;リストは、ゼロ個以上のサブリストで構成されるシーケンスであり、各サブリストは、、、または改行文字で&終わり&|ます&!。リスト(...)がまたはで複雑なコマンドとして表示される場合は、オプションでリストの最後のサブリストからこのターミネータを省略できます{...}。サブリストがまたは改行で終わると、;シェルは次のサブリストを実行する前にサブリストが完了するのを待ちます。サブリストがまたはで終わる場合、&シェル&|&!バックグラウンドで最後のパイプを実行し、完了するのを待ちません(バックグラウンドでサブリスト全体を実行している他のシェルとの違いに注意してください)。バックグラウンドパイプラインはゼロ状態を返します。

おすすめ記事