最近「シェルスクリプトの if
はパイプ出来る」という事を知った。bashでしか確認していないので、zsh等の別のシェルではどうか分からないが。
よく、コマンドの出力結果を行毎に走査する為に while
にパイプするが、条件分岐の構文にパイプを適用するという発想は正直なかった……
# よく有るループの例
cat somefile.txt \
| while read line
do
# ファイルの各行に対する何らかの処理:ここでは単に出力する
echo $line
done
if
へパイプを繋ぎ以下の用にすると、条件が真の時には then
節のコマンドに、偽の時には else
節のコマンドにパイプを繋いだかのように動作する。勿論、 if
から別のコマンドへパイプを繋ぐ事も可能。
echo "foo
bar" \
| if [[ $var = '' ]]
then
head -n 1
else
tail -n 1
fi \
| cat -n
# `var` が空文字列ならば:
# 1 foo
# そうでなければ:
# 1 bar
シェルの特色は「パイプで様々な処理を繋げる事が出来る」点だと分かっているつもりだったが、こんな事も出来たとは……奥が深い。
ラベル:Bash