检测字符串何时存在但不以bash开头

时间:2017-03-10 17:59:55

标签: bash

我正在尝试创建一个bash程序,如果程序提供了--file参数后跟一个选项,其中选项不应以短划线开头,那么将结果保存到具有用户选择名称的文件中。所以我使用了以下条件:

    if [[ -n $2 && !($2="[^-]") ]]

但那没用。即使第二个参数以短划线开头,它仍会将输出保存到文件中。我也试过用这个:

   1) if ! [[ -z $2 && ($2="[^-]") ]]

它也像前一个那样。有什么问题?提前谢谢!

1 个答案:

答案 0 :(得分:3)

作为模式匹配,这可能如下所示:

[[ $2 ]] && [[ $2 != -* ]]

注意:

  • &&之外移动[[ ]]不是强制性的,但它是一种好形式:它确保您的代码可以重写以使用POSIX test命令而无需使用过时功能(-a-o)或需要重组。
  • 空白 是强制性的。在!($2="[^-]")中,!()以及=都不会被解析为单独的运算符。
  • =!=检查模式匹配,而不是正则表达式[[ ]]中的正则表达式运算符为=~。在差异中,锚点(^在字符串的开头匹配,或者$在末尾匹配)隐含在模式中,而它们需要在正则表达式中显式,并且{{ 1}}具有非常不同的含义(模式中的*与正则表达式中的*意味着相同。)
  • .* 中的^已经否定 [^-],因此除了使用-之外,您的代码只会与之匹配当第二个参数中 一个破折号时。

自己测试一下:

!