You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 07:30:51