首页 > 解决方案 > Zsh 与 Bash 中的参数扩展:“${VAR,,}”的等价物是什么?

问题描述

我正在尝试在 macOS(11.4)上使用 bash/zsh 参数扩展来执行大小写修改并犯了一些错误。具体来说,我想获取一个包含字符串的变量并将其转换为蛇形(即: from This is a STRINGto this_is_a_string)。我正在采取婴儿步骤,到目前为止,我只是想把所有东西都变成小写,据我所知,理论应该是这样的:

$ VAR="StRING"
$ echo "${VAR,,}" # turn the string characters to lowercase
string

起初这不起作用,因为 macOS bash 是非常过时的 3.2.57。我用自制软件安装了当前版本(5.1.8),它工作正常。

不过,这不适用于 zsh(最新版本)。我想这是因为 zsh 中的参数扩展不同,对吗?不过,我找不到任何足智多谋的参考。我相信 zsh 的工作方式有点不同,更像sed. 当然,我可以使用tr甚至sed它自己,但我想使用参数扩展。

标签: zshparameter-expansion

解决方案


在 Zsh 中,您可以使用扩展修饰符

echo ${VAR:l}
## => string

要将字符串转换为大写,您可以使用

echo ${VAR:u}
## => STRING

查看在线 Zsh 演示

或者,您可以使用扩展标志

echo ${(L)VAR}
## => string
echo ${(U)VAR}
## => STRING

推荐阅读