如何将字符串从大写转换中的Bash为小写? [重复](How to convert a stri

2019-06-26 04:01发布

这个问题已经在这里有一个答案:

  • 如何将一个字符串中的Bash为小写转换? 20个回答

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

与这个问题tr命令是我能当我用echo语句命令只得到了结果。 例如:

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

上述工作并导致“你好”,但我需要分配结果如下变量:

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

当指定值像上面它给了我一个空的结果。

PS:我的Bash版本3.1.17是

Answer 1:

如果你使用bash 4,你可以用下面的办法:

x="HELLO"
echo $x  # HELLO

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

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

只使用一个,^做出的第一个字母lowercaseuppercase



Answer 2:

实现你的代码的正确方法是

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

它使用$(...)符号捕获命令的输出中的一个变量。 还要注意周围的引号string变量-你需要他们那里,以表明$valworld都被分配到一个单一的东西string

如果你有bash 4.0或更高,更有效的和优雅的方式来做到这一点是使用bash内置的字符串操作:

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


Answer 3:

需要注意的是tr只能处理简单的ASCII,作出任何tr面临的国际字符时基于解决方案失败。

这同样适用于在bash 4基于${x,,}解决方案。

awk工具,在另一方面,可以正确支持甚至UTF-8 /多字节输入。

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

答礼貌liborw 。



Answer 4:

Why not execute in backticks ?

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

This assigns the result of the command in backticks to the variable x. (i.e. it's not particular to tr but is a common pattern/solution for shell scripting)

You can use $(..) instead of the backticks. See here for more info.



Answer 5:

我在Ubuntu 14.04,与猛砸版本4.3.11。 不过,我仍然没有内置的字符串操作的乐趣${y,,}

这是我在我的脚本来强制使用大写:

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


Answer 6:

如果您在使用声明定义变量(旧:排版),那么你能说出整个变量的使用值的情况。

$ declare -u FOO=AbCxxx
$ echo $FOO
ABCXXX

"-l"做LC。



Answer 7:

这为我工作。 谢谢罗迪!

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

一个小的修改,如果你使用的是强调旁边的变量,您需要在{}封装变量名。

string="${val}_world"


文章来源: How to convert a string from uppercase to lowercase in Bash? [duplicate]