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

我一直在寻找将字符串值从大写转换为小写的方法。所有的搜索结果都显示了使用 tr命令的方法。

tr命令的问题在于,只有在使用带有 Ref = “ https://linux.die.net/man/1/echo”rel = “ norefrer”> echo 语句的命令时才能得到结果。例如:

y="HELLO"
echo $y| tr '[:upper:]' '[:lower:]'

上面的代码可以工作,结果是‘ hello’,但是我需要将结果分配给一个变量,如下所示:

y="HELLO"
val=$y| tr '[:upper:]' '[:lower:]'
string=$val world

当像上面这样赋值时,它给我一个空结果。

PS: 我的 Bash 版本是3.1.17

250186 次浏览

返回执行:

 x=`echo "$y" | tr '[:upper:]' '[:lower:]'`

这会将反勾中命令的结果赋值给变量 x。(也就是说,它不是特定于 tr的,但它是 shell 脚本编程的一种常见模式/解决方案。)

您可以使用 $(..)而不是反勾。请参阅 给你了解更多信息。

如果您正在使用 Bash4,您可以使用以下方法:

x="HELLO"
echo $x  # HELLO


y=${x,,}
echo $y  # hello


z=${y^^}
echo $z  # HELLO

只使用一个 ,^,使第一个字母 lowercaseuppercase

实现代码的一种方法是

y="HELLO"
val=$(echo "$y" | tr '[:upper:]' '[:lower:]')
string="$val world"

这使用 $(...)表示法捕获变量中命令的输出。还要注意 string变量周围的引号——您需要它们来表明 $valworld是要分配给 string的单个事物。

如果你有 Bash 4.0或更高版本,一个更有效更优雅的方法是使用 Bash 内置的字符串操作:

y="HELLO"
string="${y,,} world"

请注意,tr只能处理普通的 ASCII,这使得任何基于 tr的解决方案在面对国际字符时都会失败。

基于 Bash 4的 ${x,,}解决方案也是如此。

另一方面,AWK工具甚至适当地支持 UTF-8/多字节输入。

y="HELLO"
val=$(echo "$y" | awk '{print tolower($0)}')
string="$val world"

Liborw提供答案。

我使用的是 Ubuntu 14.04(Trusty Tahr) ,Bash 版本是4.3.11

这就是我在剧本中用来强制大写的内容:

CAPITALIZED=`echo "${y}" | tr '[a-z]' '[A-Z]'`

如果您使用 Declaration (old: typeset)定义变量,那么您可以在整个变量使用过程中声明该值的大小写。

declare -u FOO=AbCxxx
echo $FOO

产出:

ABCXXX

选项 -l改为 一个 href = “ https://linux.die.net/man/1/bash”rel = “ nofollow norefrer”>小写:

当给变量赋值时,所有的大写字符都会转换为小写。大写属性被禁用。