Thanks for the information. Alas, I don't believe this is does what is needed. Here is output from no subshell nesting, one subshell, and then two: $ for i in 1; do if [[ x == x ]]; then print -P %_ ; fi; done for then $ (for i in 1; do if [[ x == x ]]; then print -P %_ ; fi; done) for then $ ( (for i in 1; do if [[ x == x ]]; then print -P %_ ; fi; done) ) for then In all cases I get the same output with no indication in the last two cases that they are inside one or two subshells. On Fri, Sep 5, 2008 at 3:49 PM, Phil Pennock < zsh-workers+phil.pennock@spodhuis.org > wrote: > On 2008-09-05 at 10:11 -0400, Rocky Bernstein wrote: > > It would be great if there were a way to get the subshell level nesting. > ksh > > uses .sh.level and bash BASH_SUBSHELL. > > I don't think zsh has that directly as a variable, but it does have %_ > for prompt substitution, producing on stdout a list of words identifying > the nested parser states. It's output text, not a data structure > internal to the shell (so not an array). > > zsh% for i in 1; do if [[ x == x ]]; then print -P %_ ; fi; done > for then > zsh% > > Of course, capturing that in $(...) will add a cmdsubst to the end. > > -Phil >