Linux 是否可以创建动态别名?

Linux 是否可以创建动态别名?,linux,alias,zsh,Linux,Alias,Zsh,我正在用C语言创建一个库,每个头文件/源文件都有单独的文件夹。我最近需要进入许多文件夹并更改.c和.h文件中的一些代码。所以我经常使用以下命令: nano <some-detailed-filename.c> nano <some-detailed-filename.h> 其想法是,它将打开当前目录中的任何.c/.h文件。但是,当我将这些行添加到.zshrc文件时,我会得到以下别名: # alias nanc nanc='nano ./xh.c ./yp.c

我正在用C语言创建一个库,每个头文件/源文件都有单独的文件夹。我最近需要进入许多文件夹并更改.c和.h文件中的一些代码。所以我经常使用以下命令:

nano <some-detailed-filename.c>
nano <some-detailed-filename.h>
其想法是,它将打开当前目录中的任何.c/.h文件。但是,当我将这些行添加到.zshrc文件时,我会得到以下别名:

# alias nanc
nanc='nano ./xh.c       ./yp.c'
# alias nanh
nanh='nano ./xh.h       ./yp.h'
这是不需要的,因为nano试图打开的文件仅位于my home/login目录中


如何创建此别名,以便在发出命令时使用我所在的当前目录?我在搜索方面运气不太好。

我认为您可以创建一个函数,然后创建该函数的别名。在函数中,有一个条件用于检测所需内容。即使是只有一个短名称的函数。了解如何创建带参数的函数,然后您可以使用类似“nan-c”或“nan-h”的函数。bash选项getopt提供了这种可能性。

作业中不要使用双引号;使用单引号。如果使用双引号,则会立即替换该值

顺便说一句,您的别名还有另一个问题:ls命令将扩展碰巧是目录名的任何通配符(目录名以“.c”结尾是完全合法的)。为了防止由此产生额外的奇怪结果,您可能需要使用“-d”选项,例如

alias nanc='nano $(ls -d ./*.c)'
但是,即使是
ls
也是冗余的。这对我很有用:

alias nanc='nano *.c'

谢谢你的回答。在我的例子中,我不担心隐藏的文件,因为只有在我创建的目录中,每个目录只包含一个.c/.h文件时,才会使用这个别名。
alias nanc='nano *.c'