※これは個人的な疑問のメモです。解答はありません。

### コマンドをパイプでつないでcdした時の挙動が、bashとzshで異なる ```sh jot -b a 3 | while read L; do cd $L; done ```
#### bashのばあい
  • 特にカレントディレクトリは変更されません。
#### zshのばあい
  • a/a/aディレクトリへ移動します。
### 調査
#### ①実行時のwhileの中のPIDを確認(サブシェルになっているかどうか) ```sh echo $$ && jot -b a 3 | while read $L; do echo $$; done ```
#### bashのばあい
  • 同じPIDが出る
#### zshのばあい
  • 同じPIDが出る
→ どちらもサブシェルにはなってないっぽい?

#### ②cdコマンドの場所を確認 ```sh which cd ```
#### bashのばあい
  • /usr/bin/cd
#### zshのばあい
  • cd: shell built-in command
ここで ```sh % cat /usr/bin/cd #!/bin/sh # $FreeBSD: src/usr.bin/alias/generic.sh,v 1.2.10.1.8.1 2012/03/03 06:15:13 kensmith Exp $ # This file is in the public domain. builtin ${0##*/} ${1+"$@"} ```ビルトインコマンドを呼び出しているだけ。→ /usr/bin/cdを呼んでいるのが怪しい?

#### ③環境変数の引き継ぎを確認 こんなシェルを用意 ```sh a=b echo a1=$a jot -b a 3 | while read L; do echo a=$L; a=$L; done echo a2=$a ```
#### bashに食わせたばあい ```sh % bash a.sh a1=b a=a a=a a=a a2=b ```
#### zshに食わせたばあい ```sh % zsh a.sh a1=b a=a a=a a=a a2=a ```この結果だけを見ると、bashはサブシェルになってて、zshはサブシェルになってないような感じ。

### 結果:わからん