var
値が . の変数があるとしますfOo bar1 baR2 bArab
。
lc_var
たとえば、最初の単語を除くすべての単語を小文字に変換されたバージョンなど、別の変数に保存するにはどうすればよいですか?var
私はそれが適切なAWKまたはsedコマンドで置き換えられるように見えるかもlc_var=$(echo $var | ...)
しれません。...
ベストアンサー1
シェルを含むzsh
:
set -o extendedglob
lc_var=${var/%(#m) */${(L)MATCH}}
kshは、${var/%pattern/replacement}
一致するvarの末尾をに置き換えて、一致する部分(つまり、必須部分)を保存して小文字に変換します。pattern
replacement
(#m)
$MATCH
extendedglob
${(L)MATCH}
$MATCH
シェルを含むbash
:
tmp1=${var%% *}
tmp2=${var#"$tmp1"}
lc_var=$tmp1${tmp2,,}
POSIXlyでは、次のようにします。
lc_var=$(
awk '
BEGIN{
var = ARGV[1]
if (i = index(var, " "))
var = substr(var, 1, i) tolower(substr(var, i + 1))
print var "."
}' "$var"
)
lc_var=${lc_var%.}
とにかく、これはPOSIX / Korn / bash / zshシェル構文lc_var=$(echo $var ...)
のために不可能に見え、$(...)
そのシェルではecho
任意のデータを出力できませんそして変数拡張を引用する必要があります。(多分除くzsh
)。
これらすべてのバリアントは、最初の空白文字の後のすべての文字を小文字に変換します$var
(どの文字であるかを想定せずに)。単語がスペース以外の文字で区切られたり、最初の単語の前に単語区切り文字がある場合は、それを調整する必要があります。