小写命令输出,而不是变量?

小写命令输出,而不是变量?

在 zsh 中,假设我想要一个小写的 UUID。 uuidgen返回大写,所以我可以这样做:

export MY_UUID=`uuidgen`      # get uppercase UUID
export MY_UUID=${MY_UUID:l}   # convert to lowercase

但我真正想要的是:

${`uuidgen`:l}                # does not work!

我什至不需要变量;只是输出。我创建该变量只是因为我找不到立即获取并小写命令输出的方法。

是否有一种语法可以让我一步获得命令的小写输出?

答案1

您不需要有变量。你可以做:

echo ${(L)$(uuidgen)}          # nested parameter expansion

或者:

print ${$(uuidgen):l}          # history modifiers

从网页参考:

14.3.2 规则

  1. 嵌套替换 如果存在多个嵌套的 ${...} 形式,则替换将从内向外执行。

来自man zshexpn(这很清楚):

如果使用 ${...} 类型参数表达式或 $(...) 类型命令替换来代替上面的 name,则首先对其进行扩展,然后使用结果,就好像它是 name 的值一样。因此可以执行嵌套操作: ${${foo#head}%tail} 替换 $foo 的值,同时head' and删除 tail'。 $(...) 的形式通常与下面描述的标志结合使用;请参阅下面的示例。参数扩展中的每个名称或嵌套 ${...} 后面也可以跟一个下标表达式,如 zshparam(1) 中的数组参数中所述。

使用以下命令行获取它:

$ LESS=+'/If  a .* type parameter' man zshexpn

并且,对于历史修饰符扩展 ( ${ … :l}) (强调我的)zsh 文档(摘录如下)并且man zshexpn包含相同的文本:

14.1.4 修饰符 在可选字指示符之后,您可以添加一系列一个或多个以下修饰符,每个修饰符前面都有一个“:”。这些修饰符还处理文件名生成和参数扩展的结果

相关内容