我正在从键盘读取一个字符,并将其转换为大写,然后再次显示该字符。
但是以下代码会产生错误:
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
中,则可以使用命令替换:
read a;
a=$(echo $a | tr 'a-z' 'A-Z')
echo $a
bash
的,@KevinBuchs?这在这里可以工作,但在 sh
中却不行。另外,在那个点上变量 a
的内容是什么?对我来说,这是最优雅的解决方案,因为它避免了进一步分叉进程。 - Ulrich Eckhardt^^
参数扩展是在 Bash 4.0 版本中添加的。 - nisetamaAWK是一种拥有完整Unicode支持的转换大小写的正确方式 ;-)
echo "öäüßè" | awk 'BEGIN { getline; print toupper($0) }'
bash
(或者足够相似),这并不适用于fish
。 - Ulrich Eckhardt使用Bash脚本
printf "Type your Message Here: " read message
echo Upper Case: $message | tr [:lower:] [:upper:];
echo Lower Case: $message | tr [:upper:] [:lower:]
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]'`
注意额外的正则表达式[]括号。
在/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
...
tr
:tr [:lower:] [:upper:];
- pattivacek