Bash 别名未按预期执行

Bash 别名未按预期执行

读了一些 alises 后,我想尝试一下,但我无法让它发挥作用。为什么这个别名不起作用?

$ printenv PWD
/home/vm
$ alias testpwd="$PWD"
$ testpwd
-bash: /home/vm: Is a directory

但如果我用 echo 来做这件事,它确实有效吗?

$ alias testpwd="echo $PWD"
$ testpwd
/home/vm

我不明白为什么第一次测试没有成功?

答案1

这两个示例都可以正常工作,因为它们按照您的指示进行操作。该alias命令定义了一个代表定义其余部分的单词:

alias testpwd="echo $PWD"

当您用作testpwd命令中的第一个单词时,您可以考虑将该单词替换为echo $PWD。但是,由于您将命令扩展括在双引号中,因此$PWD在执行命令时会计算该值定义。因此在本例中它被保存为echo /home/vm.每当你运行时,testpwd你都会得到/home/vm输出,无论你的当前的的价值$PWD。 (像往常一样,使用“单”引号而不是“双引号”以避免 shell 立即评估变量。)

第一个示例的工作方式相同;这定义的testpwd意思是"$PWD"

alias testpwd="$PWD"

现在,当您运行时,testpwd您可以考虑(像以前一样)它被定义别名时的当前值替换"$PWD",换句话说/home/vm。这尝试将当前目录作为命令执行,这将严重失败:

-bash: /home/vm: Is a directory

相关内容