인수 또는 파이프에서 입력을 받아 들일 수있는 방식으로 다음 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
명령 줄 인수 수가 0인지 확인base64 --decode <<< "$1"
하나herestring
를 사용echo
하고 배관 하는 대신 사용할 수도 있습니다.base64
답변
Sundeep의 대답 은 base64
유틸리티가 여러 줄을 지원하지 않기 때문에 효과가 있습니다. 보다 일반적인 경우에 대한보다 일반적인 수정
- 여러 명령 줄 인수를 허용하는 대상 유틸리티
- 여러 줄을 포함하는 파이프 또는 리디렉션
같은 것입니다
my_function() {
if (( ${#} == 0 )) ; then
while read -r line ; do
target_utility "${line}"
done
else
target_utility "${@}"
fi
}