Экранирование восклицательного знака в оболочке (отрицание для конструкции if/then)?
Я часто использую это непосредственно в оболочке, чтобы проверить результат для сценариев, и он отлично работает:
$ if [ -d mydirectory ] ; then echo YES ; fi
YES
Однако, если я хочу использовать отрицание, используя восклицательный знак, он завершается с ошибкой (ну, на самом деле, не сбоит, но переходит в многострочный режим в ожидании ввода с клавиатуры, и мне нужно выйти с помощью Ctrl-C):
$ if [ ! -d makehuman ] ; then echo YES ; if
>
> ^C
$ if [ \! -d makehuman ] ; then echo YES ; if
>
> ^C
Как я могу использовать восклицательный знак отрицания прямо в оболочке?
2 ответа
Это была синтаксическая ошибка, приведенные выше команды должны заканчиваться fi
не if
$ if [ ! -d mydirectoryNO ] ; then echo YES ; fi
YES
Во всяком случае, я также нашел эту хорошую ссылку: классическая команда тестирования [Bash Hackers Wiki]
В командной строке Bash восклицательный знак можно экранировать с помощью обратной косой черты, как и все специальные символы. Не забывайте правильный if
синтаксис, хотя!
$ if [ \! -d mydirectory ]; then echo Yay; else echo Nay; fi