1

Я пытаюсь получить простое выражение 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

Приветствия.

2 ответа2

3

Похоже, это один из случаев, когда сначала помогает поместить его в переменную. Это работает для меня как в 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'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .