次のbash関数を、引数またはパイプからの入力を受け入れることができるように記述したいと思います。
b64decode() {
echo "$1" | base64 --decode; echo
}
望ましい使用法:
$ b64decode "QWxhZGRpbjpvcGVuIHNlc2FtZQ="
$ b64decode < file.txt
$ b64decode <<< "QWxhZGRpbjpvcGVuIHNlc2FtZQ="
$ echo "QWxhZGRpbjpvcGVuIHNlc2FtZQ=" | b64decode
/dev/stdin
を使用して標準入力から読み取ることができます
b64decode()
{
if (( $# == 0 )) ; then
base64 --decode < /dev/stdin
echo
else
base64 --decode <<< "$1"
echo
fi
}
$# == 0
コマンドライン引数の数がゼロかどうかを確認しますbase64 --decode <<< "$1"
herestring
を使用する代わりにecho
を使用してbase64
にパイプすることもできますサンディープの答え はbase64
そのユーティリティは複数行をサポートしていないためです。より一般的なケースのより一般的な修正
のようなものです
my_function() {
if (( ${#} == 0 )) ; then
while read -r line ; do
target_utility "${line}"
done
else
target_utility "${@}"
fi
}