当命令中出现反斜杠或引用命令时,POSIX标准中的内容会阻止别名替换?

时间:2015-08-06 06:48:49

标签: shell posix alias

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

[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 ~]$ ec\ho 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别名)应为1   已由别名实用程序定义,而不是随后   未定义使用unalias。实现还可以提供预定义的   调用shell时生效的有效别名。阻止   如果shell当前不是递归别名中的无限循环   处理同名的别名,该词应替换为   别名的价值;否则,不得更换。

     

如果替换单词的别名值以< blank>结尾,   shell应检查下一个命令字是否有别名替换;   此过程将继续,直到找到无效的单词   别名或别名值不以< blank>结尾。

     

当按照此POSIX.1-2008卷的别名指定使用时,别名   定义不得通过单独的调用继承   shell或shell调用的实用程序执行环境;   请参阅Shell执行环境。

上一节中是否有任何原因造成这种情况?

1 个答案:

答案 0 :(得分:2)

是的,有一些内容:"中的未加引号这个词...确定它是否是一个不带引号的有效别名。"当引用命令字的任何部分时,该句子禁止别名替换。

shell中有三个引用机制:反斜杠,单引号和双引号。