“${var,,}”中的逗号是什么意思?

“${var,,}”中的逗号是什么意思?
read -p "Enter yes/no   " SOMEVAR

SOMEVAR=`"echo ${SOMEVAR,,}"`

上面的代码给了我一个${SOMEVAR,,}: bad substitution错误。

答案1

参数扩展将扩展为 shell中所有字符均为小写${variable,,}的值。鉴于您在运行此代码时收到“错误替换”错误表明您实际上是$variablebash

  • 不使用该 shell,但可能/bin/sh(并不总是bash)。但没有收到错误read -p表明您更有可能是
  • bash使用不支持此扩展的旧版本(在 的第 4 版中引入bash)。

扩展的通用形式是匹配${variable,,pattern}中的所有字符都将转换为小写(用于转换为大写):$variablepattern^^

$ str="HELLO"
$ printf '%s\n' "${str,,[HEO]}"
heLLo

另请参阅bash系统手册。


对于旧版本的bash,您可以执行以下操作来小写变量的值:

variable=$( tr 'A-Z' 'a-z' <<<"$variable" )

tr这通过使用“here-string”传递变量的值。该实用程序将to ASCII 范围(假设为 C/POSIX 语言环境)tr中的所有字符音译为to范围中的相应字符。AZaz


另请注意

SOMEVAR=`"echo ${SOMEVAR,,}"`

更好地写成

SOMEVAR=${SOMEVAR,,}

事实上,您所写的内容会在bash版本 4+ 中给您一个“找不到命令”错误,除非您有一个名为 的命令echo string,包括空格(string用户输入的内容在哪里)。这是由于命令替换试图执行双引号字符串。

相关内容