「${var,,}」のカンマはどういう意味ですか?

「${var,,}」のカンマはどういう意味ですか?
read -p "Enter yes/no   " SOMEVAR

SOMEVAR=`"echo ${SOMEVAR,,}"`

上記のコードは私に${SOMEVAR,,}: bad substitutionエラーを与えます。

答え1

${variable,,}パラメータ拡張は、すべての文字が小文字のシェルの値に拡張されます。このコードを実行すると「誤った置換」エラーが発生することを考慮すると、実際には$variablebash

  • そのシェルを使用しませんが、可能です/bin/sh(常にそうではありませんbash)。しかし、エラーが発生しないということは、read -pエラーが発生する可能性が高いことを意味します。
  • bashbashこの拡張をサポートしていない以前のバージョン(バージョン4に導入されています)を使用してください。

拡張の一般的な形式は、${variable,,pattern}一致するすべての文字を小文字に変換することです(大文字に変換するため)。$variablepattern^^

$ str="HELLO"
$ printf '%s\n' "${str,,[HEO]}"
heLLo

bashシステムのマニュアルも参照してください。


以前のバージョンでは、bash次のようにして変数値を小文字にすることができます。

variable=$( tr 'A-Z' 'a-z' <<<"$variable" )

trこれは、「here-string」を使用して変数値を渡すことによって行われます。このユーティリティーは、trto ASCII 範囲 (C/POSIX ロケール仮定) のすべての文字を to 範囲内の対応する文字に変換します。AZaz


また参考にしてください

SOMEVAR=`"echo ${SOMEVAR,,}"`

次のように書く方が良いです。

SOMEVAR=${SOMEVAR,,}

実際、スペース(ユーザー入力が行く場所)を含む名前bashのコマンドがないと、バージョン4+で作成した内容に「コマンドが見つかりません」というエラーが発生します。これは、二重引用符で囲まれた文字列を実行したいコマンドの置き換えによるものです。echo stringstring

関連情報