\!
在bash命令中的作用是什么?!在Bash命令中
例如,我发现下面这个命令将在不同的行为与\!
:
find subdir -lname 'test*' \! -newer somethinghere
谷歌搜索似乎并没有带来任何东西具体涉及到\!
除了命令行格式。
\!
在bash命令中的作用是什么?!在Bash命令中
例如,我发现下面这个命令将在不同的行为与\!
:
find subdir -lname 'test*' \! -newer somethinghere
谷歌搜索似乎并没有带来任何东西具体涉及到\!
除了命令行格式。
在字符转义之前加一个反斜杠,防止它被解析为语法。因此,\!
是一个相当于'!'
的terser - 它确保find
作为参数传递给!
,而shell不会以任何方式解释它。
没有任一这些,如果[[ $- = *H* ]]
(其是真的在交互式壳和默认情况下),并且如果是histchars
从其默认值未修饰,!
触发历史扩展。这是每次bash的手册页的QUOTING部分:
当使用命令行历史扩展功能(见下文历史扩展),历史扩展字符,通常是
!
,必须被引用,以防止历史扩展。
这个!是否定,例如:
find . -readable
将返回所有可读的文件/目录,而
find . ! -readable
将返回所有的文件/文件可以不读取(断链或目录 - r许可)
\字符是逃避。
但是,好奇地在我的电脑上(Debian/bash)我需要逃避* char但不是!一。为了更加明确我需要写
find . -name abc\*
但
find . -name abc\* ! -readable
find . -name abc\* \! -readable
工作,并具有同样的效果
不那么好奇。旧式的历史扩展并不总是能够实现的 - 个人而言,我在设置点文件时所做的第一件事就是关闭它。它在非交互式shell(即运行脚本)中总是被默认禁用。 –
@CharlesDuffy感谢您的澄清 –
'\!'被用来逃避'!'这会导致历史扩展否则 – anubhava
堆栈溢出是编程和开发问题的网站。这个问题似乎与题目无关,因为它不涉及编程或开发。请参阅帮助中心的[我可以询问哪些主题](http://stackoverflow.com/help/on-topic)。也许[超级用户](http://superuser.com/)或[Unix&Linux堆栈交换](http://unix.stackexchange.com/)会是一个更好的地方。 – jww