\!在Bash命令中

时间:2017-09-22 20:23:16

标签: linux bash shell

bash命令中\!的功能是什么?

例如,我注意到以下此命令的行为与\!

不同

find subdir -lname 'test*' \! -newer somethinghere

Google搜索似乎没有显示与\!特别相关的任何内容,除了命令行格式。

2 个答案:

答案 0 :(得分:3)

在角色转义之前加上反斜杠,防止它被解析为语法。因此,testVec相当于\! - 它确保'!'作为参数传递find,而shell不会以任何方式解释它。

如果没有其中任何一个,如果!(在交互式shell中默认情况下为true),并且[[ $- = *H* ]]未从其默认值修改,则histchars会触发历史记录扩展。这是根据bash手册页的QUOTING部分:

  

当使用命令历史记录扩展工具时(请参阅下面的历史扩展),必须引用历史记录扩展字符(通常为!)以防止历史记录扩展。

答案 1 :(得分:2)

!用于否定,例如:

find . -readable 

将返回所有可读文件/目录,而

find . ! -readable

将返回所有可以读取的文件/目录(断开链接或-r权限)

\ 字符用于转义。

然而,好奇地在我的电脑上(Debian / bash)我需要逃避* char但不是!一。为了更明确,我需要写

 find . -name abc\*

但是

 find . -name abc\* ! -readable
 find . -name abc\* \! -readable

工作并具有相同的效果