在Bash中如何将字符串转换为小写

2023-10-18 08:08:12 浏览数 (3)

问:

在bash中有没有一种方法可以将字符串转换为小写字符串?

例如,如果我有:

代码语言:shell复制
a="Hi all"

我想把它转换为:

代码语言:shell复制
"hi all"

答:

有多种方法。

符合POSIX标准的:

使用 tr 命令

代码语言:shell复制
$ a="Hi all"
$ echo "$a" | tr '[:upper:]' '[:lower:]'
hi all

使用 awk 命令

代码语言:shell复制
$ a="Hi all"
$ echo "$a" | awk '{print tolower($0)}'
hi all

非POSIX标准的:

使用 bash 中的 Shell 参数扩展

代码语言:shell复制
para="A Few WORDS"
echo "${para,,}"

bash 手册里关于这块的语法格式如下

代码语言:shell复制
${parameter^pattern}
${parameter^^pattern}
${parameter,pattern}
${parameter,,pattern}

其中 "^" 运算符将匹配模式的小写字母转换为大写;"," 运算符将匹配的大写字母转换为小写。"^^" 和 ",," 扩展将转换扩展值中的每个匹配字符;"^" 和 "," 扩展仅匹配并转换扩展值中的第一个字符。

如果省略了 pattern,则将其视为 "?",它匹配每个字符。

使用 sed 命令

代码语言:shell复制
str="Hello World"
echo $str | sed -e 's/(.*)/L1/'

使用 perl 命令

代码语言:shell复制
str="Hello World"
echo $str | perl -ne 'print lc'

另外还可以使用 python 命令

代码语言:shell复制
str="Hello World"
python -c "print '$str'.lower()"

参考:

  • stackoverflow question 2264428
  • https://www.gnu.org/software/bash/manual/bash.html#Shell-Parameter-Expansion

相关阅读:

  • 在bash中:-(冒号破折号)的用法
  • 如何通过一个Bash定界符来分割一个字符串
  • 用Bash变量进行sed替换

0 人点赞