在别名中使用 dir var 吗?

在别名中使用 dir var 吗?

我有一个目录变量和函数如下:

coding_dir="~/Documents/coding"
function f() { cd $1 && ls -a ; }

我想创建一个别名,如下所示:

alias rnd="f $coding_dir/random"

但是当我尝试使用别名时,出现以下错误:

f:cd: no such file or directory: /random

我知道我可以在别名中使用整个目录,但是当我使用bash.我如何让它发挥作用zsh

答案1

您是否有可能在设置 $coding_dir 之前定义别名?从错误消息来看,似乎就是发生了这种情况。

问题是您在定义别名时扩展 $coding_dir ,而不是在使用别名时扩展 $coding_dir 。

如果您希望它在使用时扩展它,那么您可能应该使用单引号定义它,这样它只会在使用时扩展 $coding_dir 。

alias rnd='f $coding_dir/random'

即使您尚未定义 $coding_dir 并稍后定义它,这也将起作用:

$ coding_dir=~/Documents/coding
$ rnd
(should chdir to your $HOME/Documents/coding/random)

您可能还想在别名中添加引号,以便它处理带有空格的目录名称:

alias rnd='f "$coding_dir"/random'

还有 f 函数的定义:

function f() { cd "$1" && ls -a ; }

答案2

该问题是由您将波形符与引号结合使用引起的。例如,请参阅我的系统中的这段文字记录:

-0-1- ~ > x="~/tmp"
-0-1- ~ > cd $x
cd: no such file or directory: ~/tmp
-1-1- ~ > y="$HOME/tmp"
-0-1- ~ > cd $y
-0-1- ~/tmp > cd ..
-0-1- ~ > z=~/tmp
-0-1- ~ > cd $z
-0-1- ~/tmp >

您的波形符不会扩展,因为它被放在引号内。

相关内容