Shell Korn脚本参数

Shell Korn脚本参数,shell,ksh,Shell,Ksh,我遇到了下面的代码片段,不确定while循环中-?的确切用途。我在多个网站和论坛上搜索这个参数,但没有得到任何确切的答案 请提供任何信息,谢谢 while [[ $1 = -? ]]; do case $1 in -a) a1=alligator ;; -b) a2=bear ;; -c) a3=cougar ;; esac shift 在ksh中,在双括号内,=和=运算符用于模式匹配:[[string=pattern]][1] 这些是s

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

请提供任何信息,谢谢

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

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

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

因此,您要测试的是,
$1
是否匹配后跟任何单个字符的连字符。换句话说,第一个位置参数看起来像选项字符串吗

[1] --要执行字符串相等性检查,您的模式要么不包含特殊的全局字符,要么引用或转义这些字符


在我看来,一种更健壮的选项解析方法是使用
getopts
builtin:

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))

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

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

因此,您要测试的是,
$1
是否匹配后跟任何单个字符的连字符。换句话说,第一个位置参数看起来像选项字符串吗

[1] --要执行字符串相等性检查,您的模式要么不包含特殊的全局字符,要么引用或转义这些字符


在我看来,一种更健壮的选项解析方法是使用
getopts
builtin:

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))

非常感谢,先生!!这对我很有帮助,+1为您提供了详细的解释和替代方法。非常感谢,先生!!这对我很有帮助,你的详细解释和另一种方法帮助了我。