34

假设我有以下别名。

alias pwd_alias='echo `pwd`'

此别名不是“动态的”。pwd它会在 shell 启动后立即进行评估。反正有没有延迟对滴答声中的表达式的评估,直到别名的运行时?

4

3 回答 3

41

你真正想要的是一个函数,而不是别名。

pwd_alias() {
   echo "$PWD"
}

别名只不过是替换文本而已。任何具有复杂性的东西都需要一个函数。

于 2012-11-06T23:43:27.153 回答
4

正如 jordanm 所说,别名只不过是替换文本而已。
如果您希望 echo 的参数是由 bash 扩展的 pwd 的输出,那么我不明白您的问题。
如果您希望 echo 的参数是 `pwd` 并保留反引号,这确实是可能的,例如:

alias a="echo '\`pwd\`'"

所以,如果不是 echo 你有一些东西在它自己的运行时做反引号扩展,也许这就是你想要的。

于 2012-12-19T07:28:42.123 回答
0

我不相信您可以更改在 shell 启动时发生的评估。由于创建别名的过程是在 shell 启动时运行的,因此pwd会对其进行评估。您可以简单地将别名更改为仅在没有反引号的情况下pwd作为pwd输出运行而无需回显。解决此问题的一种简单方法是,如果您不希望更改为使用别名,则在路径中从使用别名更改为 shell 脚本。

#!/bin/bash
pwd
于 2012-11-06T23:27:03.560 回答