创建一个动态别名,这可能吗?

Creating a dynamic alias, is it possible?

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

nano <some-detailed-filename.c>
nano <some-detailed-filename.h>

我想看看创建如下所示的别名:

alias nanc="nano $(ls ./*.c)"
alias nanh="nano $(ls ./*.h)"

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

# alias nanc
nanc='nano ./xh.c       ./yp.c'
# alias nanh
nanh='nano ./xh.h       ./yp.h'

这是不需要的,因为 nano 尝试打开的文件仅位于我的 home/login 目录中。

我怎样才能创建这个别名,以便它使用我在发出命令时所在的当前目录?我的搜索不太顺利。

我认为您可以创建一个函数,然后为该函数创建一个别名。在函数 one condiction 中检测你想要什么。甚至是只有一个短名称的函数。了解如何创建带有参数的函数,然后您可以使用 'nan -c' 或 'nan -h' 之类的东西。 bash 选项 getopt 为您提供了这种可能性。

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

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

alias nanc='nano $(ls -d ./*.c)'

然而,即使 ls 也是多余的。这对我有用:

alias nanc='nano *.c'