我安装的软件在个人资料中插入了以下内容:
[ -s "$SOME_FILE" ] && \. "$SOME_FILE"
我知道dot .
是的代名词source
,所以我怀疑这只是在寻找文件,但是我从未见过\.
。它还有其他作用吗?
编辑有关DV的内容:搜索“反斜杠点”会导致有关./
调用可执行文件时的问题,并man source
导致手册页\.
不出现。我不知道还能尝试什么,因此是一个问题。
编辑2:查看相关问题
我安装的软件在个人资料中插入了以下内容:
[ -s "$SOME_FILE" ] && \. "$SOME_FILE"
我知道dot .
是的代名词source
,所以我怀疑这只是在寻找文件,但是我从未见过\.
。它还有其他作用吗?
编辑有关DV的内容:搜索“反斜杠点”会导致有关./
调用可执行文件时的问题,并man source
导致手册页\.
不出现。我不知道还能尝试什么,因此是一个问题。
编辑2:查看相关问题
Answers:
引号外的反斜杠表示“在解析过程中按字面意义解释下一个字符”。由于.
是解析器的普通字符,\.
因此以与相同的方式进行解析.
,并调用内置函数.
(source
在bash中是同义词)。
在这种情况下,有一种情况可以有所作为。如果用户已经定义了一个叫做别名.
较早.profile
,并.profile
在展开别名外壳正在被读取(其打坏只默认完成时,它的交互方式调用时),那么.
将触发别名,但\.
仍然会触发内置的,因为shell不会对以任何方式引用的单词尝试别名扩展。
我怀疑这.
已更改为\.
因为用户为别名后抱怨.
。
请注意,这\.
将调用一个名为的函数.
。据推测,编写函数的用户比编写别名的用户更为精通,并且.profile
如果要包含来自第三方的代码,则会知道重新定义标准命令是一个坏主意。但是,如果您想绕过别名和函数,可以编写command .
。此代码段的作者之所以没有这样做,是因为他们关心的是没有command
内置功能的古董外壳,或者更可能是因为他们不了解它。
顺便说一句,在其中定义任何别名.profile
不是一个好主意,因为.profile
它是会话初始化脚本,而不是Shell初始化脚本。bash的别名属于.bashrc
。
该\.
是一种“文字点”,即只是一个点。它将作为标准.
命令(类似于source
中的bash
)。
POSIX标准对此有话要说(我的重点是)
<backslash>
不带引号的A 应该保留后面字符的文字值,但a除外<newline>
。如果a<newline>
跟随<backslash>
,则外壳程序应将此解释为行继续。在<backslash>
和<newline>
应拆分之前被删除的输入令牌。由于转义<newline>
符已从输入中完全删除,并且没有被任何空格替换,因此它不能用作令牌分隔符。
点字符可以别名:
$ alias .='echo hello'
$ .
hello
这意味着\.
可以避免使用该.
命令的别名版本,因为,
在定界标记后,但在Shell Grammar中应用语法规则之前,应检查标识为简单命令的命令名单词的结果单词,以确定其是否为未加引号的有效别名。