尝试让 `$FOO =~ bar|baz` 在 Bash 和 Zsh 中工作

尝试让 `$FOO =~ bar|baz` 在 Bash 和 Zsh 中工作

我正在尝试让一个简单if语句在 Zsh 和 Bash 中都能运行,但是找不到可以同时运行两者的东西。

# this works with Zsh
if [[ "$TERM_PROGRAM" =~ iTerm\|Apple_Terminal ]]; then echo apples; fi

# this works with Bash
if [[ "$TERM_PROGRAM" =~ iTerm|Apple_Terminal ]]; then echo apples; fi

干杯。

答案1

看起来这是一个先将其放入变量中有帮助的情况。这在 zsh 和 bash 中都对我有用:

pattern='^iTerm|Apple_Terminal$'
if [[ "$TERM_PROGRAM" =~ $pattern ]]; then echo apples; fi

(注意:我在模式中添加了锚点,以避免匹配“not_iTerm”之类的东西。)

答案2

我找不到在 Bash 和 Zsh 上都能运行的逃避正则表达式的方法。

这是我正在使用的解决方法:

echo "$TERM_PROGRAM" | egrep -q 'iTerm|Apple_Terminal'

相关内容