read -p "Enter yes/no " SOMEVAR
SOMEVAR=`"echo ${SOMEVAR,,}"`
上面的代码给了我一个${SOMEVAR,,}: bad substitution
错误。
答案1
参数扩展将扩展为 shell中所有字符均为小写${variable,,}
的值。鉴于您在运行此代码时收到“错误替换”错误表明您实际上是$variable
bash
- 不使用该 shell,但可能
/bin/sh
(并不总是bash
)。但没有收到错误read -p
表明您更有可能是 bash
使用不支持此扩展的旧版本(在 的第 4 版中引入bash
)。
扩展的通用形式是匹配${variable,,pattern}
中的所有字符都将转换为小写(用于转换为大写):$variable
pattern
^^
$ 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范围中的相应字符。A
Z
a
z
另请注意
SOMEVAR=`"echo ${SOMEVAR,,}"`
更好地写成
SOMEVAR=${SOMEVAR,,}
事实上,您所写的内容会在bash
版本 4+ 中给您一个“找不到命令”错误,除非您有一个名为 的命令echo string
,包括空格(string
用户输入的内容在哪里)。这是由于命令替换试图执行双引号字符串。