Korn脚本参数

时间:2017-12-15 13:00:31

标签: shell ksh

我遇到了以下代码段,并且不确定while循环中 - ?的确切目的是什么。我在多个网站和论坛中搜索了这个参数,但无法得到任何确切的答案。

请输入任何信息,谢谢。

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

1 个答案:

答案 0 :(得分:2)

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

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

所以你要测试的是$1是否匹配连字符后跟任何单个字符。换句话说,第一个位置参数是否类似于选项字符串。

[1] - 要执行字符串相等性检查,您的模式要么不包含特殊的通配符,要么引用或转义此类字符。

IMO,一种更健壮的选项解析方法是内置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))