web-dev-qa-db-ja.com

シェルで大文字に変換する

キーボードから文字を読み取り、大文字に変換してから、文字を再度表示しています。しかし、これはエラーを示しています。これどうやってするの。

私のコード:-

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
6
avinashse

aの結果をaに保存したい場合は、コマンド置換を使用できます。

read a;
a=$(echo $a | tr 'a-z' 'A-Z')
echo $a
19
P.P

これは、次のようにbashでネイティブに実行できます。

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

trはそれ自体で実行できるため、bashのような他のコマンドを呼び出す必要はありません。

16
dogbane

AWKは、Unicodeを完全にサポートして大文字/小文字を変換する正しい方法です;-)

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

コマンド置換を使用する:

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

Echoとtrの周りのティック `に注意してください。

3
axiom

awkはここに行くのに間違った方法ですが、これができる1つの方法です。

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

取得できませんでした

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  
...
0
Andrew