这个问题已经在这里有一个答案:
- 如何将一个字符串中的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
只使用一个,
或^
做出的第一个字母lowercase
或uppercase
。
Answer 2:
实现你的代码的正确方法是
y="HELLO"
val=$(echo "$y" | tr '[:upper:]' '[:lower:]')
string="$val world"
它使用$(...)
符号捕获命令的输出中的一个变量。 还要注意周围的引号string
变量-你需要他们那里,以表明$val
和world
都被分配到一个单一的东西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]