~/.zshenvのサブシェル式が無限回帰を引き起こさないのはなぜですか?

~/.zshenvのサブシェル式が無限回帰を引き起こさないのはなぜですか?

私が理解したところ、この情報はインスタンスが~/.zshenv起動されるたびにzsh取得されます。

これは、次の行を使用すると~/.zshenv無限回帰が発生することを意味します。

(echo "$$ $(date)" >> $HOME/.debug.zshenv)

...サブシェルを表すため、他のソースなどを(...)表します。 1~/.zshenv

それでも上記の行は無害です。 AFAICT。具体的には、次のように$HOME/.debug.zshenv新しいシェルを起動した後、1行だけが表示されます。

% zsh

明らかに~/.zshenv、上記の行を評価してもソースは検索されません。なぜできないの?


1対応する式には$(date)サブシェルの作成も必要です。

答え1

サブシェルの意味を間違って理解しました。サブシェルはまったく新しいプロセスではなく、既存のプロセスのフォークです。

zshたとえば、明示的に呼び出す場合

zsh -c 'echo "$$ $(date)" >> $HOME/.debug.zshenv'

その後、シェルは分岐して呼び出され、execve()まったく新しいシェルを起動して再初期化します。

関連情報