bashとzshの標準出力の扱いのちがい

bashzshの標準出力の扱いのちがい

bashではパイプラインの途中で変数に代入できない? - 計算機と戯れる日々 で苦しんでいたんだがzshなら片づく事が判明。

ほぼbashと使い勝手同じだからなぁ。

パイプ後のreadの扱い。

% bash -c 'echo aaa|read -rd "" s; echo "$s"'

% zsh -c 'echo aaa|read -rd "" s; echo "$s"'
aaa

zshならパイプによるメソッドチェーンが可能

teeの出力をパイプにまわしたときの扱い

bashは全てをマージするのにzshは分離する。=パイプの間に挟んでデバグ可能

% bash -c 'echo foo| tee >(cat) | sed "s/\(.\)/_\1/"'
_foo
_foo
% zsh -c 'echo foo| tee >(cat) | sed "s/\(.\)/_\1/"'
foo
_foo

以下のように多重化しても全然問題なし。

% bash -c 'echo foo| tee >(cat) >(sed s/foo/bar/)| sed "s/\(.\)/_\1/"'
_foo
_foo
_bar
% zsh -c 'echo foo| tee >(cat) >(sed s/foo/bar/)| sed "s/\(.\)/_\1/"'
foo
bar
_foo

zshにしようかな…いままでがんばってきたんだけどなぁ。