【问题标题】:different interpretation of varialble as pattern [duplicate]变量作为模式的不同解释[重复]
【发布时间】:2021-03-04 08:39:53
【问题描述】:

我希望有人澄清这一点,因为我不明白。 这是一个示例代码,用于测试参数是否为数字(整数)

#/bin/env bash
pattern="^[+|-]?[0-9]+$"
[[ "$1" =~ "$pattern" ]] && echo "1:number" || echo "1:NOT number"
[[ "$1" =~ $pattern ]] && echo "1:number" || echo "1:NOT number"

建议总是引用变量,但是在这里,如果您使用这个带有各种输入的简单脚本进行测试,您会看到如果输入数字,引用的模式变量会返回错误的结果(第一次测试) 这是为什么? 提前感谢任何愿意向我解释这一点的人。 最后,对不起,如果已经回答了,但我还没有找到那个特定的。

【问题讨论】:

  • 您在[[ ... ]] 内部,因此通常的引用规则不适用。在这种情况下,有一组不同的引用规则。对于模式匹配,您的引号会抑制特殊正则表达式字符的解释。

标签: bash variables


【解决方案1】:

通常建议引用所有变量。但[[ ]] 是一个特殊的运算符,它对内容的解析方式不同。

您不需要在双方括号内引用变量,因为它不进行分词或文件名扩展。但是引用大多数变量并没有什么坏处。

但是,=~ 的模式操作数被非常特殊地对待。引用的任何部分都被视为文字,而不是正则表达式模式。因此,当您编写"$pattern" 时,它不再进行正则表达式匹配,它只是在$1 中搜索$pattern 中的实际字符。

【讨论】:

    猜你喜欢
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    • 2015-10-15
    • 1970-01-01
    相关资源
    最近更新 更多