rag*_*aga 78 string bash shell lowercase uppercase
我一直在寻找一种方法将字符串值从大写转换为小写.所有搜索结果都显示了使用tr命令的方法.
该tr命令的问题是我只能在使用带有echo语句的命令时才能获得结果.例如:
y="HELLO"
echo $y| tr '[:upper:]' '[:lower:]'
Run Code Online (Sandbox Code Playgroud)
上面的工作和结果是"你好",但我需要将结果分配给变量,如下所示:
y="HELLO"
val=$y| tr '[:upper:]' '[:lower:]'
string=$val world
Run Code Online (Sandbox Code Playgroud)
如上所述分配值时,它会给我一个空结果.
PS:我的Bash版本是3.1.17
kev*_*kev 133
如果您使用的是bash 4,则可以使用以下方法:
x="HELLO"
echo $x # HELLO
y=${x,,}
echo $y # hello
z=${y^^}
echo $z # HELLO
Run Code Online (Sandbox Code Playgroud)
只使用一个,或^制作第一个字母lowercase或uppercase.
Rod*_*uis 57
实现代码的正确方法是
y="HELLO"
val=$(echo "$y" | tr '[:upper:]' '[:lower:]')
string="$val world"
Run Code Online (Sandbox Code Playgroud)
这使用$(...)符号来捕获变量中命令的输出.还要注意string变量周围的引号- 你需要它们来指示它$val并且world是一个要分配的东西string.
如果你有bash4.0或更高版本,更有效和优雅的方法是使用bash内置字符串操作:
y="HELLO"
string="${y,,} world"
Run Code Online (Sandbox Code Playgroud)
Dev*_*lar 17
请注意,tr只能处理纯ASCII,使任何tr基于国际字符的解决方案失败.
基于bash 4的${x,,}解决方案也是如此.
awk另一方面,该工具可以正确支持UTF-8 /多字节输入.
y="HELLO"
val=$(echo "$y" | awk '{print tolower($0)}')
string="$val world"
Run Code Online (Sandbox Code Playgroud)
回答由liborw提供.
Bri*_*new 14
为什么不用反引号执行?
x=`echo "$y" | tr '[:upper:]' '[:lower:]'`
Run Code Online (Sandbox Code Playgroud)
这会将反引号中的命令结果赋给变量x.(即它不是特别的,tr但是shell脚本的常见模式/解决方案)
您可以使用$(..)而不是反引号.有关详细信息,请参见此处
我使用的是Bash版本4.3.11的Ubuntu 14.04。但是,我仍然没有内置于字符串操作的乐趣${y,,}
这是我在脚本中用来强制大写的内容:
CAPITALIZED=`echo "${y}" | tr '[a-z]' '[A-Z]'`
Run Code Online (Sandbox Code Playgroud)
小智 5
根据罗迪的回答,这对我有用。
y="HELLO"
val=$(echo $y | tr '[:upper:]' '[:lower:]')
string="$val world"
Run Code Online (Sandbox Code Playgroud)
一个小修改:如果您在变量旁边使用下划线,则需要将变量名称封装在 {} 中。
string="${val}_world"
Run Code Online (Sandbox Code Playgroud)
如果使用声明(旧:类型集)定义变量,则可以在变量的整个使用过程中陈述该值的大小写。
$ declare -u FOO=AbCxxx
$ echo $FOO
ABCXXX
Run Code Online (Sandbox Code Playgroud)
"-l" lc。
| 归档时间: |
|
| 查看次数: |
160306 次 |
| 最近记录: |