2012-12-04 28 views
4

我正在從鍵盤讀取一個字符並將其轉換爲大寫,然後再次顯示該字符。 但是這顯示錯誤。 我該怎麼做。在shell中轉換爲大寫

我的代碼: -

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 

回答

11

如果你想存儲的a結果早在a,那麼你可以做使用命令替換

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

使用命令取代:

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

注意滴答`圍繞回聲和tr。

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

無需調用其他命令,如tr,因爲bash可以做到這一點本身:

+0

你自己做一個以上類似的話正確的方式,但在這裏你假定shell是'bash'(或者非常相似)。例如,這對'fish'不起作用。 –

14

這可以本身在bash如下進行。

+2

我認爲OP從未提及過使用什麼外殼。 – axiom

+1

減少因爲不起作用:#a =「$ {a ^^}」 -bash:$ {a ^^}:錯誤的替換 –

+0

您是如何開始'bash',@KevinBuchs?它在這裏工作,但它不適用於'sh'。另外,當時變量「a」的內容是什麼?對我而言,這是最優雅的解決方案,因爲它避免了進一步的流程。 –

1

awk是錯誤的方式去這裏,但這裏的一個方式,它可以做:

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

無法獲取

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 
... 
5

AWK是大/小寫轉換與完整的Unicode支持;-)

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