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 | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。