我已经定义了这样的别名。
[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执行环境。
上一节中是否有任何原因造成这种情况?
答案 0 :(得分:2)
是的,有一些内容:"中的未加引号这个词...确定它是否是一个不带引号的有效别名。"当引用命令字的任何部分时,该句子禁止别名替换。
shell中有三个引用机制:反斜杠,单引号和双引号。