![Getopts가 함수 내에서 작동하지 않습니다.](https://linux55.com/image/129523/Getopts%EA%B0%80%20%ED%95%A8%EC%88%98%20%EB%82%B4%EC%97%90%EC%84%9C%20%EC%9E%91%EB%8F%99%ED%95%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
함수에서 사용하려고 하는데 getops
작동하지 않는 것 같습니다.
#!/bin/bash
function main()
{
while getopts ":p:t:c:b:" o; do
case "${o}" in
p)
echo "GOt P"
p=$OPTARG
;;
t)
echo "GOt T"
t=$OPTARG
;;
c)
echo "GOt C"
c=$OPTARG
;;
b)
echo "GOt b"
b=$OPTARG
;;
*)
#usage
echo "Unknown Option"
return
;;
esac
done
echo $p
echo $t
echo $c
echo $b
}
main
그런 다음 다음과 같이 실행하십시오.
$ ./bin/testArguments.sh -p . -t README.md -c 234 -b 1
optid가 로컬인지 확인하려고 시도했지만 그것도 작동하지 않았습니다. 또 다른 문제가 있을 수 있나요?
답변1
함수 에 main
매개변수를 전달 하지 않습니다. 함수가 스크립트에 전달된 것과 동일한 인수를 가져오도록 하려면 다음과 함께 전달하세요.
main "$@"
바꾸다:
main
또한 스크립트와 관련이 있습니다.
- "function foo() {}"와 "foo() {}"의 차이점
- 왜 printf가 echo보다 나은가요?
- bash/POSIX 쉘에서 변수를 인용하는 것을 잊어버리는 보안 위험
- stderr에서 오류를 인쇄하고 싶습니다:
echo >&2 Unknown option
- 오류가 발생하면 0이 아닌 종료 상태를 반환하려고 합니다(
return 1
). - 함수를 호출할 때 이전에 호출된 경우 (예: 함수가 이전에 호출된 경우)를 대비하여 먼저 1로
getopts
설정하는 것이 좋습니다 .OPTIND
getopts
답변2
함수에서 인수는 스크립트에 전달된 인수가 아니라 함수에 전달된 인수입니다.
$ cat foo.sh
function main ()
{
echo "$@"
}
echo "$@"
main
$ bash foo.sh bar
bar
$
"$@"
다음 주소 로 전달해야 합니다 main
.
main "$@"
비록 동일한 스크립트에서 함수를 계속해서 호출 main
하지 않는 한 스크립트의 함수는 상당히 쓸모가 없다고 생각합니다 .main