2021年11月20日

シェルの `if` はパイプ出来る

最近「シェルスクリプトの 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
posted by 天井冴太 at 09:00| Comment(0) | Study | 更新情報をチェックする
この記事へのコメント
コメントを書く
コチラをクリックしてください