115

文字列の値を大文字から小文字に変換する方法を探していました。すべての検索結果は、trコマンドを使用する方法を示しています。

このコマンドの問題は、trechoステートメントを指定してコマンドを使用した場合にのみ結果を取得できることです。例えば:

y="HELLO"
echo $y| tr '[:upper:]' '[:lower:]'

上記は機能し、結果は「hello」になりますが、結果を次のように変数に割り当てる必要があります。

y="HELLO"
val=$y| tr '[:upper:]' '[:lower:]'
string=$val world

上記のように値を割り当てると、空の結果が得られます。

PS:私のBashバージョンは3.1.17です

4

7 に答える 7

198

bash 4 を使用している場合は、次のアプローチを使用できます。

x="HELLO"
echo $x  # HELLO

y=${x,,}
echo $y  # hello

z=${y^^}
echo $z  # HELLO

,またはを1 つだけ使用^して、最初の文字lowercaseまたはを作成しuppercaseます。

于 2012-07-09T09:24:22.687 に答える
76

コードを実装する正しい方法は次のとおりです。

y="HELLO"
val=$(echo "$y" | tr '[:upper:]' '[:lower:]')
string="$val world"

これは、$(...)表記法を使用して、コマンドの出力を変数にキャプチャします。string変数を囲む引用符にも注意してください。引用符は、に割り当てられる単一のものであること$valを示すために必要です。worldstring

4.0以降を使用している場合bash、より効率的でエレガントな方法は、bash組み込みの文字列操作を使用することです。

y="HELLO"
string="${y,,} world"
于 2012-07-09T09:38:42.100 に答える
18

バッククォートで実行しないのはなぜですか?

 x=`echo "$y" | tr '[:upper:]' '[:lower:]'` 

これにより、コマンドの結果がバッククォートで変数に割り当てられますx。(つまり、特定のものでtrはありませんが、シェルスクリプトの一般的なパターン/ソリューションです)

$(..)バッククォートの代わりに使用できます。詳細については、こちらを参照してください。

于 2012-07-09T09:22:54.340 に答える
8

私はUbuntu 14.04を使用しており、Bashバージョンは4.3.11です。ただし、文字列操作に組み込まれた楽しみはまだありません${y,,}

これは、大文字化を強制するためにスクリプトで使用したものです。

CAPITALIZED=`echo "${y}" | tr '[a-z]' '[A-Z]'`
于 2016-02-18T16:32:39.637 に答える
4

これは私にとってはうまくいきました。ロディありがとう!

y="HELLO"
val=$(echo $y | tr '[:upper:]' '[:lower:]')
string="$val world"

変数の横にアンダースコアを使用している場合は、1 つの小さな変更 変数名を {} でカプセル化する必要があります。

string="${val}_world"
于 2014-09-26T18:16:34.097 に答える