我在if
语句中使用正则表达式和通配符。
例子:
[[ "$exitfn" =~ ^[yY]*$ ]] && return
[[ "$exitfn" == "[yY]*" ]] && return
[[ "$exitfn" == "*$fs*" ]] && return
[[ "$exitfn" == *$fs* ]] && return
但真的很想知道如果我引用*$fs*"
或不引用会带来什么困难*$fs*
。
还想知道如何使用=~
against ==
。
答案1
的右侧==
或!=
内部[[...]]
是全局模式--==
并且!=
不是字符串相等运算符,它们是模式匹配运营商。
在正则表达式或全局模式中,任何引用的部分都被视为文字文本。
[[ "$exitfn" =~ ^[yY]*$ ]] && return
- 这按预期工作
[[ "$exitfn" == "[yY]*" ]] && return
- 仅当变量是文字时才返回[yY]*
[[ "$exitfn" == "*$fs*" ]] && return
- 仅当变量包含星号后跟
$fs
星号的内容时才返回
[[ "$exitfn" == *$fs* ]] && return
- 这应该按预期工作除非的扩展
$fs
可以匹配为 glob 表达式。- 例如: if then return 如果包含至少 3 个字符,
fs='???'
则执行 return 。$exitfn
- 例如: if then return 如果包含至少 3 个字符,
太长了;博士- 你要
[[ "$exitfn" == *"$fs"* ]] && return