在POSIX标准中,当命令中有反斜杠或命令被引用时,可以防止别名替换



我已经定义了一个这样的别名。

[user@centos ~]$ alias echo='echo aliased echo says: '
[user@centos ~]$ echo hi
aliased echo says: hi

为什么当有反斜杠或部分命令被引用时不进行别名替换,如下所示?你能在http://pubs.opengroup.org/onlinepubs/9699919799/上引用POSIX标准的相关章节来解释它吗?

[user@centos ~]$ echo hi
hi
[user@centos ~]$ echo hi
hi
[user@centos ~]$ "echo" hi
hi
[user@centos ~]$ ec"ho" hi
hi
[user@centos ~]$ command echo hi
hi
[user@centos ~]$ command -v echo
alias echo='echo aliased echo says: '

引用http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html

相关章节

2.3.1别名替换

在标记被分隔之后,但在应用语法之前Shell语法中的规则,生成的单词被标识为一个简单命令的命令名词应检查确定是否为未加引号的有效别名。然而,保留词在语法正确的上下文中,考生不得使用别名替换。必须有一个有效的别名(参见XBD别名)是由别名实用程序定义的,而不是随后定义的未定义使用unalias。实现也可以提供预定义的调用shell时生效的有效别名。为了防止无限循环的递归混叠,如果shell不是当前处理相同名称的别名时,该字应替换为别名的值;否则,不得更换。

如果替代单词的别名的值以结尾,shell将检查下一个命令字是否替换别名;这个过程将继续,直到发现一个词不是有效的别名或别名值不能以结尾。

当按照POSIX.1-2008卷的指定使用时,别名类的单独调用不能继承定义Shell或由Shell调用的实用程序执行环境;查看Shell执行环境

上面的部分中是否有什么原因导致了这种情况?

是的,有一些东西:单词未引号在"…"确定它是否是未加引号的有效别名。当命令字的任何部分被引用时,此句子将抑制别名替换。

在shell中有三种引用机制:反斜杠、单引号和双引号。

最新更新