我有一个目录变量和函数如下:
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 >
您的波形符不会扩展,因为它被放在引号内。