Zsh 中的参数扩展 vs Bash:“${VAR,}”的等价物是什么?
Parameter Expansion in Zsh vs Bash: what is the equivalent of "${VAR,,}"?
我正在尝试在 macOS (11.4) 上使用 bash/zsh 参数扩展执行 case modification,但出现了一些错误。具体来说,我想获取一个包含字符串的变量并将其转换为 snakecase(即:从 This is a STRING
到 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
本身,但我想使用参数扩展。
在 Zsh 中,你可以使用 expansion modifiers:
echo ${VAR:l}
## => string
要将字符串转为大写,可以使用
echo ${VAR:u}
## => STRING
看到 online Zsh demo。
或者,您可以使用 expansion flags:
echo ${(L)VAR}
## => string
echo ${(U)VAR}
## => STRING
使用 zsh 和参数扩展转换为小写的模式是使用 L
标志。
使用你的例子:
> VAR="StRING"
> echo ${(L)VAR}
但是我不确定它在 bash 和 zsh 之间的可移植性如何。
我正在尝试在 macOS (11.4) 上使用 bash/zsh 参数扩展执行 case modification,但出现了一些错误。具体来说,我想获取一个包含字符串的变量并将其转换为 snakecase(即:从 This is a STRING
到 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
本身,但我想使用参数扩展。
在 Zsh 中,你可以使用 expansion modifiers:
echo ${VAR:l}
## => string
要将字符串转为大写,可以使用
echo ${VAR:u}
## => STRING
看到 online Zsh demo。
或者,您可以使用 expansion flags:
echo ${(L)VAR}
## => string
echo ${(U)VAR}
## => STRING
使用 zsh 和参数扩展转换为小写的模式是使用 L
标志。
使用你的例子:
> VAR="StRING"
> echo ${(L)VAR}
但是我不确定它在 bash 和 zsh 之间的可移植性如何。