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

A-K*_*A-K 6 string bash replace lowercase substitution

我正在尝试使用bash中的字符串替换将大写字母更改为小写字母,但是我遇到了严重的替换错误。

> a=HEY
> echo $a 
HEY 
> echo ${a,,}
-bash: ${a,,}: bad substitution
# desired output is hey
Run Code Online (Sandbox Code Playgroud)

我已经看到了与此类似的问题,但是在大多数情况下,这归因于使用早期版本的bash。我正在使用GNU bash 4,但仍然遇到相同的问题。

> bash --version
GNU bash, version 4.3.33(1)-release (x86_64-apple-darwin14.1.0)
Run Code Online (Sandbox Code Playgroud)

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

gei*_*rha 5

看起来最先出现的 bashPATH恰好是 4.3.33,但您在交互式会话中运行的 bash 可能是旧版本。跑去echo "$BASH_VERSION"检查。

如果以上正确,运行

type bash
Run Code Online (Sandbox Code Playgroud)

查看较新版本的路径,可能类似于/opt/local/bin/bash. 我会假设它是。如果你希望它成为你的登录 shell,首先将它添加到 /etc/shells

sudo -e /etc/shells
Run Code Online (Sandbox Code Playgroud)

在这之后,允许用户通过使用以选择作为登录壳chshCH安格SH ELL)命令

chsh -s /opt/local/bin/bash
Run Code Online (Sandbox Code Playgroud)

  • `awk '{print tolower($0)}' <<< "$var"` 或 `tr '[:upper:]' '[:lower:'] <<< "$var"` 如果你有 GNU tr ,它只处理ascii字母的转换,而BSD tr处理utf-8,所以如果你在MacOS上,使用tr。如果您使用的是 GNU/linux,请使用 awk。 (2认同)