それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

bashスクリプトで標準入力か引数のどちらかを取得する

STDINか引数を処理するコマンドを作りたい。

たとえば、次のようなコマンドを作りたい。

標準入力があるときは、標準入力を使い、それ以外は引数を使う。

echo AAA | to_lower
to_lower AAA

to_lower の例。

ヒアストリングに展開すれば楽ちんです。

<<< ${@:-$(</dev/stdin)}
#!/usr/bin/env bash
tr "[:upper:]" "[:lower:]" <<< ${@:-$(</dev/stdin)}

{$@} が引数で引数があるときは引数を使い、ないときは$(</dev/stdin) で標準入力を探しに行く

参考資料

https://stackoverflow.com/questions/19619490/how-to-read-stdin-when-no-arguments-are-passed/19619634#19619634