2
有人可以解釋下列行爲嗎?
$ echo $SHLVL
1
$ zsh -c 'echo $SHLVL'
2
$ zsh -c '(echo $SHLVL)'
1
我不理解上一個結果。 zsh是否爲()子殼重置$ SHLVL? 擊的結果是不同的:
$ echo $SHLVL
1
$ bash -c 'echo $SHLVL'
2
$ bash -c '(echo $SHLVL)'
2
其中,至少,似乎更符合邏輯。 在一個案例中,當我測試這個時,我期待3的最後結果。爲什麼沒有shell提供這樣的結果?我對$ SHLVL的誤解是什麼?
我認爲這也是一個錯誤。這個附加假設很有趣,儘管我認爲它不太可能。如果我們不斷添加更多的子shell級別,那麼我們需要$ SHLVL的負值...(!?)我會嘗試確認它是zsh項目本身的錯誤。 Thx的詳細答案。 – elmart 2014-11-01 14:12:21
看到這個:'zsh -c'(((print $ SHLVL $ ZSH_SUBSHELL)))''echoes'-1 3' – 2014-11-01 14:59:29
哇。那麼你的假設似乎是真的。所以,在zsh中,實際上,真正的$ SHLVL將是$ SHLVL + $ ZSH_SUBSHELL。我必須考慮如何這樣的事情會有用。乍一看,這似乎很奇怪,因爲它會根據$ SHLVL破壞標準腳本。恭喜你,你似乎發現了一個無證的功能! – elmart 2014-11-01 15:07:19