String Bash 4.3.33中的字符串替换(小写)-错误替换错误

String Bash 4.3.33中的字符串替换(小写)-错误替换错误,string,bash,replace,substitution,lowercase,String,Bash,Replace,Substitution,Lowercase,我试图在bash中使用字符串替换将大写字母改为小写字母,但我遇到了一个严重的替换错误 > a=HEY > echo $a HEY > echo ${a,,} -bash: ${a,,}: bad substitution # desired output is hey 我见过类似的问题,但在大多数情况下都是因为使用了早期版本的bash。我正在使用GNUBash4,但仍然存在同样的问题 > bash --version GNU bash, version 4.3.33

我试图在bash中使用字符串替换将大写字母改为小写字母,但我遇到了一个严重的替换错误

> a=HEY
> echo $a 
HEY 
> echo ${a,,}
-bash: ${a,,}: bad substitution
# desired output is hey
我见过类似的问题,但在大多数情况下都是因为使用了早期版本的bash。我正在使用GNUBash4,但仍然存在同样的问题

> bash --version
GNU bash, version 4.3.33(1)-release (x86_64-apple-darwin14.1.0)

这可能是Mac的东西?任何帮助都将不胜感激。

根据对我评论的评论,以下是答案:

echo $a | tr '[:upper:]' '[:lower:]'

看起来
路径中的第一个bash碰巧是4.3.33,但是您在交互式会话中运行的bash可能是旧版本。运行
echo“$BASH\u VERSION”
进行检查

如果上述情况正确,请运行

type bash
要查看较新版本的路径,可能类似于
/opt/local/bin/bash
。我想是的。如果希望它成为您的登录shell,请首先将其添加到/etc/shell

sudo -e /etc/shells
之后,允许用户使用
chsh
changeshell)命令选择该shell作为登录shell


在末尾不提供模式是执行
${a,,?}
的快捷方式。如果您显式地尝试
${a,,?}
会发生什么情况?
GNUBash,版本4.3.33
-
$(a=HEY;echo${a,,})
会产生
HEY
而没有问题?您确定当前的shell是Bash4吗?也许您的会话在OSX默认Bash3中运行?尝试一下echo$BASH\u版本
@baf就是这样。我刚刚用
3.2.39
进行了测试,得到了
-bash:${a,,}:bad substitution
。看起来OP可能安装了bash 4,但运行了bash 3(或其他)shell。全面工作:
echo$a | tr'[:upper:][:lower:][:lower:][/code>?谢谢kecso,tr始终是一个很好的解决方法。我的问题其实是为什么字符串替换不起作用,而不是试图通过不同的方法得到相同的结果。我在公司的电脑上。因此,我无法升级bash。有人知道小写转换的替代方法吗?
awk'{print tolower($0)}谢谢。awk是一个有用的工具,我觉得大多数人都不知道。
chsh -s /opt/local/bin/bash