文字列値を大文字から小文字に変換する方法を探しています。すべての検索結果は、tr
コマンドを使用したアプローチを示しています。
tr
コマンドの問題は、echoステートメントでコマンドを使用した場合にのみ結果を取得できることです。例えば:
y="HELLO"
echo $y| tr '[:upper:]' '[:lower:]'
上記は機能し、「hello」になりますが、次のように結果を変数に割り当てる必要があります。
y="HELLO"
val=$y| tr '[:upper:]' '[:lower:]'
string=$val world
上記のような値を割り当てると、空の結果が得られます。
PS:私のBashバージョンは3.1.17です
Bash 4を使用している場合、次のアプローチを使用できます。
x="HELLO"
echo $x # HELLO
y=${x,,}
echo $y # hello
z=${y^^}
echo $z # HELLO
,
または^
を1つだけ使用して、最初の文字をlowercase
またはuppercase
にします。
コードを実装する正しい方法は
y="HELLO"
val=$(echo "$y" | tr '[:upper:]' '[:lower:]')
string="$val world"
これは、$(...)
表記を使用して、コマンドの出力を変数にキャプチャします。 string
変数を囲む引用符にも注意してください。$val
とworld
がstring
に割り当てられる単一のものであることを示すために必要です。
bash
4.0以降を使用している場合、より効率的でエレガントな方法は、bash
組み込みの文字列操作を使用することです。
y="HELLO"
string="${y,,} world"
tr
はプレーンASCIIのみを処理できるため、国際文字に直面するとtr
ベースのソリューションは失敗します。
Bash 4ベースの${x,,}
ソリューションについても同様です。
一方、awk
ツールは、UTF-8 /マルチバイト入力でも適切にサポートします。
y="HELLO"
val=$(echo "$y" | awk '{print tolower($0)}')
string="$val world"
liborw の好意による回答。
バックティックで実行してみませんか?
x=`echo "$y" | tr '[:upper:]' '[:lower:]'`
これにより、コマンドの結果がバックティックで変数x
に割り当てられます。 (つまり、tr
に特有のものではありませんが、シェルスクリプトの一般的なパターン/ソリューションです)
バックティックの代わりに$(..)
を使用できます。詳細については here を参照してください。
私はUbuntu 14.04で、Bashバージョン4.3.11を使用しています。ただし、文字列操作${y,,}
に組み込まれた楽しみはまだありません
これは、大文字を強制するためにスクリプトで使用したものです。
CAPITALIZED=`echo "${y}" | tr '[a-z]' '[A-Z]'`
Declare(old:typeset)を使用して変数を定義すると、変数の使用中に値の大文字と小文字を区別できます。
$ declare -u FOO=AbCxxx
$ echo $FOO
ABCXXX
"-l"
はlcを実行します。
これは私のために働いた。ロディありがとう!
y="HELLO"
val=$(echo $y | tr '[:upper:]' '[:lower:]')
string="$val world"
変数の隣にアンダースコアを使用している場合、1つの小さな変更{{で変数名をカプセル化する必要があります。
string="${val}_world"