Escapando o ponto de exclamação no shell (negação para if / then construct)?

0

Eu geralmente uso isso diretamente em um shell para testar um resultado para o script, e ele funciona bem:

$ if [ -d mydirectory ] ; then echo YES ; fi
YES

No entanto, se eu quiser usar a negação usando um ponto de exclamação, ele falha ( bem, não falha, mas entra no modo multilinha esperando pela entrada do teclado, e eu tenho que escapar usando Ctrl-C ):

$ if [ ! -d makehuman ] ; then echo YES ; if
> 
> ^C
$ if [ \! -d makehuman ] ; then echo YES ; if
> 
> ^C

Como posso usar o ponto de exclamação de negação diretamente em um shell?

    
por sdaau 06.08.2011 / 14:42

2 respostas

0

Foi um erro de sintaxe, os comandos acima devem terminar com fi não if

$ if [ ! -d mydirectoryNO ] ; then echo YES ; fi
YES

De qualquer forma, eu também encontrei este link relacionado legal: O comando de teste clássico [Wiki do Bash Hackers]

    
por 06.08.2011 / 14:47
1

Na linha de comando do Bash, o ponto de exclamação pode ser escapado com uma barra invertida, assim como todos os caracteres especiais. Não esqueça a sintaxe correta de if , embora!

$ if [ \! -d mydirectory ]; then echo Yay; else echo Nay; fi
    
por 11.08.2011 / 12:15