【shell】使用getopts时踩到的坑
作者:wallace-lai 发布:2024-02-02 更新:2024-02-02
错误版本
如下所示,该shell脚本的大意是想从命令行中捕获用户输入的-t选项的值,并将其存入TARGET变量中。
#!/bin/bash
set -e
function main()
{
while getopts "t:" OPT; do
case $OPT in
t)
TARGET="$OPTARG"
;;
?)
echo "Unknow Argument : ${OPT}"
exit 1
;;
esac
done
echo "TARGET : ${TARGET}"
}
BUILD_BASE="$(cd "$(dirname $0)" && pwd)"
main
上述脚本的理想运行结果应该是以下的形式:
$ bash build.sh -t tool
TARGET : tool
然而实际情况是,脚本根本没有捕获到用户输入的-t选项的值:
$ bash build.sh -t tool
TARGET :
正确的版本
百思不得其解之际,将脚本塞给文心一言,问它到底哪里出错了。得知问题出在调用main函数的时候,你没有把脚本参数传递给main函数,人家当然捕获不到了!正确的版本如下所示,只要在main函数的调用后面加上"$@"将脚本参数传递给main函数即可。
main "$@"