bash脚本连字符运算符和方括号

时间:2014-04-03 15:18:26

标签: bash shell unix operators getopts

请有人告诉我下面脚本中的连字符操作符是什么?

[ "${MYDATA_OPT-}" ] && set "$MYDATA_OPT" "$@"

data=${MYDATA_VER-1}

是否有一些关于这些运营商的快速文档?

我也在尝试理解下面的脚本

shift $(($OPTIND -1))

while getopts vhx: c; do
    case "$c" in
            v) let data=data+1 ;;
            h) usage ; exit 0 ;;
            x) . $OPTARG ;;
            \?) usage ; exit 2 ;;
            *) usage ; exit 2 ;;
    esac
done

提前多多感谢。

1 个答案:

答案 0 :(得分:2)

Paremeter Expansions下的bash手册页中引用的表格

  

3.5.3 Shell参数扩展

     

<强> $ {参数:-word}

     

如果参数未设置或为null,则替换单词的扩展。   否则,参数的值将被替换。

生产

${MY_DATA_VER:-1}
如果1未设置,则

将扩展为MY_DATA_VER,或设置为空字符串。但是,您的示例省略了冒号:

${MY_DATA_VER-1}

这也在手册页中有记载,尽管在特定操作符记录之前(从4.1手册页)开始,只是在一个句子中倾斜:

  

省略冒号只会导致对未设置的参数进行测试。

因此,在您的示例中,如果未设置1,则扩展会生成MY_DATA_VER,或者如果设置了MY_DATA_VER(可能是空字符串),则扩展会生成shift


$OPTIND-1示例只删除了第一个OPTIND shell参数。有关getopts的重要性以及bash的工作原理说明,请参阅help getopts手册页或在bash提示符下尝试{{1}}。