在shell中转换为大写

bn31dyow  于 2022-12-23  发布在  Shell
关注(0)|答案(7)|浏览(155)

我正在从键盘阅读一个字符,并将其转换为大写,然后再次显示该字符。
但是下面的代码会产生错误:

read a;
a=echo $a | tr 'a-z' 'A-Z'
echo $a

我也试过这个:

read option;
eval $(awk -v option=$option '{print "a="toupper(option);}')
echo $a
ygya80vv

ygya80vv1#

AWK是转换大写/小写的正确方法,并且完全支持Unicode; -)

echo "öäüßè" | awk 'BEGIN { getline; print toupper($0) }'
n3h0vuf2

n3h0vuf22#

使用command substitution

a=`echo $a | tr 'a-z' 'A-Z'`

注意echotr周围的记号```。

i1icjdpr

i1icjdpr3#

使用bash脚本

printf "Type your Message Here: " read message

echo Upper Case: $message | tr [:lower:] [:upper:];
echo Lower Case: $message | tr [:upper:] [:lower:]
oipij1gg

oipij1gg4#

awk是错误的方法,但有一种方法可以做到:

a=$(awk 'BEGIN { getline; print toupper($0) }')
echo $a
bqjvbblv

bqjvbblv5#

无法获取

a=`echo $a | tr 'a-z' 'A-Z'`

去工作但是

a=`echo $a | tr '[a-z]' '[A-Z]'`

ded(注意附加的regex []括号。
在/usr/bin/sh脚本中,此操作与

...
while getopts ":l:c:" option; do  
   case "$option"  
   in  
      l) L_OPT=`echo ${OPTARG}| tr '[a-z]' '[A-Z]'`  
         ;;  
      c) C_OPT=`echo ${OPTARG} | tr '[a-z]' [A-Z]'`  
         ;;  
      \?)  
         echo $USAGE  
         exit 1  
         ;;  
   esac  
done  
...
igsr9ssn

igsr9ssn6#

如果你想把a的结果存回a,那么你可以使用 * 命令替换 *:

read a;
a=$(echo $a | tr 'a-z' 'A-Z')
echo $a
tp5buhyn

tp5buhyn7#

这可以在Bash中本地完成,如下所示:

read a;
a="${a^^}"
echo "$a"

不需要调用tr之类的其他命令,因为Bash可以自己完成这一操作。
另请参见:Bash parameter expansion

相关问题