为什么用双引号括起命令会影响别名?

为什么用双引号括起命令会影响别名?

我有一个别名rm='/bin/rm -i',我知道如果我"rm" filename在命令行中输入,别名将被忽略,并且将调用不带 -i 标志的正常 rm 命令,但我不明白为什么会这样。

我根本不明白为什么"rm"起作用,考虑到......

将字符括在双引号 ('"') 中会保留引号内所有字符的字面值,但 '$'、'`'、'\' 和启用历史扩展时的 '!' 除外。- [gnu.org][1]

...但它确实以某种方式起作用。它忽略了我的别名。这是如何运作的?

此外,我有时会在我的组织的 Korn shell 脚本中看到这些忽略别名的命令调用。但这是不必要的,对吧?因为 Korn shell 脚本无论如何都无法访问 shell 级别名吗?

[1]:https://www.gnu.org/software/bash/manual/html_node/Double-Quotes.html#:~:text=Enleading%20characters%20in%20double%20quotes,POSIX%20Mode)%2C%20%20%27%20!

答案1

这是一个非常具体的案例:参见

https://www.gnu.org/software/bash/manual/bash.html#Aliases

每个简单命令的第一个词,如果不加引号,检查它是否有别名。如果是这样,该单词将被别名的文本替换。

手册的该部分指出了别名的几个令人困惑的方面,并以以下内容结尾:

对于几乎所有用途,shell 函数都优于别名。

相关内容