我正在尝试在函数中使用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 shell 中引用变量的安全隐患
- 你想在 stderr 上输出错误:
echo >&2 Unknown option
- 您希望在发生错误时返回非零退出状态 (
return 1
) - 调用函数时
getopts
,最好先将其设置OPTIND
为 1,以防getopts
之前已调用过(例如在之前调用该函数时)。
答案2
在函数中,参数是传递给函数的参数,而不是传递给脚本的参数:
$ cat foo.sh
function main ()
{
echo "$@"
}
echo "$@"
main
$ bash foo.sh bar
bar
$
您需要传递"$@"
到main
:
main "$@"
尽管我发现main
脚本中的函数相当无用,除非您愿意main
在同一个脚本中一次又一次地调用。