代码之家  ›  专栏  ›  技术社区  ›  daxim Fayland Lam

如何获取别名值?

  •  0
  • daxim Fayland Lam  · 技术社区  · 10 月前

    在我的别名文件中,我已经定义了:

    alias e='eza --long --recurse --dereference …'
    

    我想添加一个变体,它在末尾添加了另一个选项:

    alias et='eza --long --recurse --dereference … --tree'
    

    与其重复代码,我想重用以下值 e ,我试过:

    alias et="$(alias e) --tree"
    

    这会给出错误的结果,因为命令 alias KEY 输出格式 alias KEY=VALUE 其中适当引用了VALUE。文档称之为可重用格式。

    我需要别名的值,未加引号。

    alias et="$(alias-value-unquoted e) --tree"
    # hypothetical ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
    

    我该怎么做?

    1 回复  |  直到 10 月前
        1
  •  5
  •   tjm3772    10 月前

    在简单的情况下,您可以重复别名。根据手册: The first word of the replacement text is tested for aliases, but a word that is identical to an alias being expanded is not expanded a second time. 因此,这是有效的:

    user@host: alias f='echo foo'
    user@host: f
    foo
    user@host: alias g='f bar'
    user@host: g
    foo bar
    

    在更复杂的情况下,您应该切换到函数。例如:

    e() {
      eza --long --recurse --dereference "$@"
    }
    
    et() {
      e "$@" --tree
    }
    

    请注意,函数几乎总是比别名更受欢迎,因为函数通常更容易编写(不需要额外的引号或特殊字符的转义),并且在支持参数方面更灵活。手册中Aliases条目的最后一行甚至指出: For almost every purpose, shell functions are preferred over aliases.