Tentando obter '$ FOO = ~ bar | baz' para trabalhar em Bash e Zsh

1

Estou tentando obter uma instrução if simples trabalhando no Zsh e no Bash, mas não consigo encontrar algo para trabalhar com ambos.

# 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

Felicidades.

    
por twe4ked 05.11.2012 / 05:36

2 respostas

3

Parece que este é um caso em que colocá-lo em uma variável ajuda primeiro. Isso funciona para mim tanto em zsh quanto em bash:

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

(Nota: eu adicionei âncoras ao padrão, para evitar correspondência de coisas como "not_iTerm".)

    
por 06.11.2012 / 03:00
2

Eu não consegui encontrar uma maneira de escapar do regex que funcionou no Bash e no Zsh.

Aqui está uma solução alternativa que estou usando:

echo "$TERM_PROGRAM" | egrep -q 'iTerm|Apple_Terminal'
    
por 05.11.2012 / 07:16

Tags