【发布时间】:2018-11-12 06:12:31
【问题描述】:
假设我有以下别名。
alias pwd_alias='echo `pwd`'
此别名不是“动态的”。一旦 shell 启动,它就会评估 pwd。有没有办法将刻度中表达式的评估延迟到别名的运行时?
【问题讨论】:
-
单引号应该这样做(在我的系统上也是如此)。
-
alias pwd_alias='echo $PWD'
假设我有以下别名。
alias pwd_alias='echo `pwd`'
此别名不是“动态的”。一旦 shell 启动,它就会评估 pwd。有没有办法将刻度中表达式的评估延迟到别名的运行时?
【问题讨论】:
alias pwd_alias='echo $PWD'
你真正想要的是一个函数,而不是一个别名。
pwd_alias() {
echo "$PWD"
}
别名只不过是替换文本而已。任何复杂的事物都需要函数。
【讨论】:
~/.bashrc 很好。
function pwd_alias { echo "$PWD" }
; 例如pwd_alias() { echo "$PWD"; }。
function 关键字。当我在 .bashrc 文件中尝试答案中的语法时,第一个括号出现语法错误。
正如 jordanm 所说,别名只不过是替换文本而已。
如果您希望 echo 的参数是 bash 扩展的 pwd 的输出,那么我不明白您的问题。
如果您希望 echo 的参数为 `pwd` 并保留反引号,确实可以,例如:
alias a="echo '\`pwd\`'"
所以,如果不是 echo 你有一些东西在它自己的运行时做反引号扩展,也许这就是你想要的。
【讨论】:
alias a="echo \`pwd\`"
pwd 并保留反引号。
我不相信您可以更改在 shell 启动时发生的评估。由于创建别名的过程是在 shell 启动时运行的,因此会评估 pwd。您可以简单地将别名更改为只运行pwd 而无需将反引号作为pwd 输出而无需回显。解决此问题的一种简单方法是,如果您不希望更改为使用别名,请在路径中从使用别名更改为 shell 脚本。
#!/bin/bash
pwd
【讨论】: