Korn 脚本参数

Korn script parameters

我看到了下面的代码片段,不确定 while 循环中 -? 的确切用途。我在多个站点和论坛中搜索了此参数,但没有得到任何确切答案。

请多多指教,谢谢

while [[  = -? ]]; do 
   case  in 
    -a) a1=alligator ;; 
    -b) a2=bear ;; 
    -c) a3=cougar ;; 
   esac 
   shift 

在 ksh 中,在双括号内,=== 运算符用于 模式匹配 [[ string = pattern ]] [1]

这些是 shell 路径名扩展模式。 ? 将匹配任何单个字符。

所以您要测试的是 </code> 是否匹配后跟任何单个字符的连字符。换句话说,第一个位置参数看起来像一个选项字符串吗?</p> <p>[1] -- 要执行字符串相等性检查,您的模式要么不包含特殊的通配符,要么这些字符被引号或转义。</p> <hr> <p>IMO,一种更强大的选项解析方法是使用 <code>getopts 内置函数:

while getopts :abc opt; do
    case $opt in
        a) a1=alligator ;; 
        b) a2=bear ;; 
        c) a3=cougar ;; 
        :) print -u2 "error: missing required argument for -$OPTARG" ;;
        ?) print -u2 "unknown option: -$OPTARG" ;;
    esac
done
shift $((OPTIND - 1))