Ada*_*hon 60
如果字符串已经存储在一个变量中,您可以使用bash的参数扩展,特别是${parameter,,pattern}(自 bash 4.0 起可用),其中parameter是您的变量的名称pattern并被省略:
$ string="Hello, World!"
$ echo $string
Hello, World!
$ echo ${string,,}
hello, world!
Run Code Online (Sandbox Code Playgroud)
请注意,这不会更改变量的值,只会更改输出。要更改变量,您必须分配新值:
$ echo $string
Hello, World!
$ string=${string,,}
$ echo $string
hello, world!
Run Code Online (Sandbox Code Playgroud)
大写转换适用于${parameter^^pattern}:
$ echo ${string^^}
HELLO, WORLD!
Run Code Online (Sandbox Code Playgroud)
这也适用于 Unicode 字符串(至少对于当前的 bash 版本,可能至少需要 bash 4.3):
$ string='?????????'
$ echo ${string,,}
?????????
$ echo ${string^^}
?????????
Run Code Online (Sandbox Code Playgroud)
如果您正在使用zsh,则可以使用参数扩展标志(${(FLAGS)NAME};自 zsh 2.5 起可用)来实现相同的结果。该bash语法不工作zsh 1) 。小写的标志是L; 对于大写,它是U:
$ string="Hello, World!"
$ echo ${(L)string}
hello, world!
$ echo ${(U)string}
HELLO, WORLD!
$ echo $string
Hello, World!"
Run Code Online (Sandbox Code Playgroud)
这也适用于 Unicode 字符串(至少从 zsh 5.0 开始;我没有尝试使用早期版本):
$ string='?????????'
$ echo ${(L)string}
?????????
$ echo ${(U)string}
?????????
Run Code Online (Sandbox Code Playgroud)
1)虽然,看到 zsh 有这个更长的时间,它可能应该是:“zsh语法在bash.
Mic*_*jer 40
很少有方法可以与 Unicode 一起正常工作:
GNU sed 4.2.2工作:
$ echo "Id? g?si ??k?" | sed 's/.*/\U&/'
ID? G?SI ??K?
Run Code Online (Sandbox Code Playgroud)
庆典4.2.45申报确实不工作:
$ typeset -u ucase; ucase="Id? g?si ??k?"; echo $ucase
ID? G?SI ??K?
Run Code Online (Sandbox Code Playgroud)
庆典4.2.45参数扩展不会不工作:
$ str="Id? g?si ??k?"; echo ${str^^}
ID? G?SI ??K?
Run Code Online (Sandbox Code Playgroud)
bash 4.3.42declare和参数扩展工作:
$ declare -u ucase
$ ucase="Id? g?si ??k?"
$ echo $ucase
ID? G?SI ??K?
$ echo ${ucase,,}
id? g?si ??k?
Run Code Online (Sandbox Code Playgroud)
GNU TR 8.20做不工作:
$ echo "Id? g?si ??k?" | tr '[:lower:]' '[:upper:]'
ID? G?SI ??K?
Run Code Online (Sandbox Code Playgroud)
mawk(在Ubuntu 13.10默认AWK)不不工作:
$ echo "Id? g?si ??k?" | mawk '{print toupper($0)}'
ID? G?SI ??K?
Run Code Online (Sandbox Code Playgroud)
gawk作品:
$ echo "Id? g?si ??k?" | gawk '{print toupper($0)}'
ID? G?SI ??K?
Run Code Online (Sandbox Code Playgroud)
Perl的纯UC()做不工作:
$ echo "Id? g?si ??k?" | perl -ne 'print uc($_);'
ID? G?SI ??K?
Run Code Online (Sandbox Code Playgroud)
Python 2里没有任何Unicode提示并不能正常工作:
$ echo "Id? g?si ??k?" | python -c 'import sys; print sys.stdin.read().upper(),'
ID? G?SI ??K?
Run Code Online (Sandbox Code Playgroud)
Python 2 在指示处理 Unicode工作时:
$ echo "Id? g?si ??k?" | python -c 'import sys; print sys.stdin.read().decode("utf-8").upper(),'
ID? G?SI ??K?
Run Code Online (Sandbox Code Playgroud)
Python 3作品:
$ echo "Id? g?si ??k?" | python3 -c 'import sys; print(sys.stdin.read().upper(), end="")'
ID? G?SI ??K?
Run Code Online (Sandbox Code Playgroud)
Emm*_*uel 21
我会使用 bash 内部排版或声明命令来定义小写变量。
$ typeset -l lcase
$ lcase="LoWeR cAsE"
$ echo $lcase
lower case
Run Code Online (Sandbox Code Playgroud)
设置值时降低字符,而不是排版变量时。所以最好在脚本的开头排版。对于大写,您可以排版 -u。
$ typeset -u ucase
$ ucase="Upper cAsE"
$ echo $ucase
UPPER CASE
Run Code Online (Sandbox Code Playgroud)
这不是特定于 bash shell,它也适用于 ksh,也许它在 POSIX shell 定义中。
编辑:许多人轻轻地向我指出,现在排版在 bash 上已过时并被declare取代。这两个命令是等效的。
$ help typeset
typeset: typeset [-aAfFgilrtux] [-p] name[=value] ...
Set variable values and attributes.
Obsolete. See `help declare'.
$ help declare
declare: declare [-aAfFgilrtux] [-p] [name[=value] ...]
Set variable values and attributes.
Run Code Online (Sandbox Code Playgroud)
当我在异构环境中工作时,我自己仍然使用排版语法,所以我不必重写我的脚本。
rɑː*_*dʒɑ 18
你可以用tr命令来做。
在终端 ( Ctrl+ Alt+ T)
这个命令:
echo 'String here' | tr "[:lower:]" "[:upper:]"
Run Code Online (Sandbox Code Playgroud)
将小写转换为大写。
echo 'STRING HERE' | tr "[:upper:]" "[:lower:]"
Run Code Online (Sandbox Code Playgroud)
将大写转换为小写。
例子:

幸得数码城市
你也可以通过管道传输sed:
$ echo lowercase | sed 's/.*/\U&/'
LOWERCASE
Run Code Online (Sandbox Code Playgroud)
并且\L会产生相反的效果:
$ echo UPPERCASE | sed 's/.*/\L&/'
uppercase
Run Code Online (Sandbox Code Playgroud)