다음 스니펫이 있습니다.
#!/bin/bash
OPTIND=1
while getopts ":m:t" params; do
case "${params}" in
m)
bar=$OPTARG ;;
t)
foo=$OPTARG ;;
\?)
"Invalid option: -$OPTARG" >&2
print_usage
exit 2
;;
:)
echo "Option -$OPTARG requires an argument." >&2
print_usage
exit 2
;;
esac
done
shift "$(( OPTIND-1 ))"
echo "${foo}" && echo "${bar}"
이 스크립트를 통해 어떻게 stdout을 파이프할 수 있나요?
예를 들어:
echo "this is the test" | bash getoptscript.sh -m -
다음을 제공해야 합니다.
this is the test
출력으로.
답변1
cat
문자열을 명령줄 인수로 전달하는 대신 다음을 사용하여 스크립트의 표준 입력을 간단히 읽을 수 있습니다.
printf '%s\n' "$foo"
if [ "$bar" = "-" ]; then
# assume data is on standard input
cat
else
print '%s\n' "$bar"
fi
답변2
입력을 다음으로 변환합니다.논쟁:
echo "this is the test" | xargs bash getoptscript.sh -m -
결과는 다음과 같습니다.
bash getoptscript.sh -m - this is the test