在 shell 中转义感叹号(if/then 构造的否定)?

在 shell 中转义感叹号(if/then 构造的否定)?

我经常直接在 shell 中使用它来测试脚本的结果,而且效果很好:

$ 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

如何在 shell 中直接使用否定感叹号?

答案1

这是一个语法错误,上述命令应该以finot结尾if

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

无论如何,我还发现了这个很好的相关链接:经典测试命令[Bash Hackers Wiki]

答案2

在 Bash 命令行中,感叹号可以用反斜杠转义,就像所有特殊字符一样。if不过,不要忘记正确的语法!

$ if [ \! -d mydirectory ]; then echo Yay; else echo Nay; fi

相关内容