读了一些 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