使用Bash的getopts指定变量时出现非法选项错误
问题解决:Bash getopts 非法选项错误
你遇到的illegal option -- l错误,根源在于getopts的选项定义字符串没有包含l和c这两个选项。
看你的代码,while getopts "hd:" arg; do这一行里,选项字符串只有h和d:,但你在case分支里处理了l和c选项——getopts根本不知道这两个选项存在,所以当你传入-l或-c时,就会抛出非法选项的错误。
另外需要注意:如果选项需要接收参数(比如-d、-l、-c),必须在选项字符后面加冒号:,告诉getopts这个选项需要跟参数值。
修正后的完整代码如下:
DIR="./" LENGTH=0 CHAR="a" # 修正选项字符串,添加l:和c:以支持对应带参数选项 while getopts "hd:l:c:" arg; do case ${arg} in d) DIR=${OPTARG};; l) LENGTH=$OPTARG;; c) CHAR=$OPTARG;; h) echo "Flags:" echo "-h: display help" echo "-d: specify directory" echo "-l: specify length" echo "-c: specify character" exit 0;; # 可选:处理非法选项的默认分支,增强脚本健壮性 \?) echo "Invalid option: -$OPTARG" >&2 exit 1;; esac done echo $DIR echo $LENGTH echo $CHAR
测试示例:
运行./your_script.sh -d /home/user -l 15 -c z,输出结果为:
/home/user 15 z
内容的提问来源于stack exchange,提问作者Recovery Email
相关产品推荐
相关产品推荐

