3

フォーマットの単純な目的で大文字に変換したいので、将来のケースステートメントに準拠します。私が考えたように、ケースステートメントは大文字と小文字を区別します。

tr コマンドを echo コマンドと組み合わせて使用​​すると、次のような結果がすぐに得られます。

echo "Enter in Location (i.e. SDD-134)"
read answer (user enters "cfg"

echo $answer | tr '[:lower:]' '[:upper:]'   which produced

cfg # first echo not upper?

echo $answer #echo it again and it is now upper...

CFG
4

5 に答える 5

16

このバージョンはbashを必要としませんが、パイプを使用します。

read -p "Enter in Location (i.e. SDD-134) " answer
answer=$(echo "$answer" | tr '[:lower:]' '[:upper:]')
echo "$answer"

また、bashを使用していて、移植性を気にしない場合は、2行目を次のように置き換えることができます。

answer="${answer^^}"

詳細については、bashのマニュアルページの「パラメータ拡張」セクションを確認してください。

于 2012-06-22T15:19:35.873 に答える
5

tr を介して変数をエコーすると、値が出力されますが、変数の値は変更されません。

answer='cfg'
echo $answer | tr '[:lower:]' '[:upper:]'
# outputs uppercase but $answer is still lowercase

後で参照する場合は、変数を再割り当てする必要があります。

answer='cfg'
answer=$(echo $answer | tr '[:lower:]' '[:upper:]')
echo $answer
# $answer is now uppercase
于 2012-06-22T15:17:45.970 に答える
4

バージョン4bash以降:

answer=${answer^^*}
于 2012-06-22T16:53:47.650 に答える
0

何を求めているのかは明確ではありませんが、ユーザー入力を大文字に変換しようとしている場合は、次のようにしてください。

sed 1q | tr '[:lower:]' '[:upper:]' | read answer

サブシェル(zshなど)で読み取りを実行しないシェルでは、これは直接機能します。これをbashで行うには、次のようなことを行う必要があります。

printf "Enter in Location (i.e. SDD-134): "
sed 1q | tr '[:lower:]' '[:upper:]' | { read answer; echo $answer; }

サブシェルが閉じた後、answerは未設定の変数です。

于 2012-06-22T15:19:09.510 に答える
-4

変数を大文字にする良い明確な方法は

$var=`echo $var|tr '[:lower:]' '[:upper:]'`

注意 バッククォートのベネ

于 2012-06-22T16:38:31.227 に答える