在shell中转换为大写

在shell中转换为大写,shell,awk,uppercase,Shell,Awk,Uppercase,我正在从键盘读取一个字符,并将其转换为大写,然后再次显示该字符。 但这是一个错误。 我怎样才能做到这一点 我的代码:- 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 如果要将a的结果存储回a,则可以使用命令替换: 使用命令替换: a=`echo $a | tr 'a-z' 'A

我正在从键盘读取一个字符,并将其转换为大写,然后再次显示该字符。 但这是一个错误。 我怎样才能做到这一点

我的代码:-

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

如果要将
a
的结果存储回
a
,则可以使用命令替换:


使用命令替换:

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

请注意echo和tr周围的记号。

这可以在
bash
中本机完成,如下所示:

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

不需要调用其他命令,如
tr
,因为
bash
本身就可以做到这一点。

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

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

a=`echo $a | tr 'a-z' 'A-Z'` 
工作,但是

a=`echo $a | tr '[a-z]' '[A-Z]'`
did(注意附加的正则表达式[]括号。
在/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  
...

AWK是在完全支持Unicode的情况下转换大小写的正确方法;-)


我想OP从来没有提到正在使用什么shell。递减是因为不起作用:#a=“${a^^^}”-bash:${a^^^}:错误的替换您是如何开始
bash
,@KevinBuchs的?例如,它可以在这里工作,但不能与
sh
一起工作。另外,此时变量
a
的内容是什么?对我来说,这是最优雅的解决方案,因为它避免了进一步的过程。Bash 4.0中添加了
^ ^
参数扩展。您在自己上面也做了类似的评论,但这里您假设shell也是
Bash
(或足够相似)。例如,这不适用于
fish
...
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  
...
echo "öäüßè" | awk 'BEGIN { getline; print toupper($0) }'