シェル読み取りコマンドラインパラメータ$ {1,,}はどういう意味ですか?

シェル読み取りコマンドラインパラメータ$ {1,,}はどういう意味ですか?

シェルスクリプトコードでは、次のようにコマンドラインパラメータが変数に割り当てられます。文のコンマ(、)はどういう意味ですか? Bashスクリプトからコマンドライン引数を読み取るときに2つのカンマを追加するとどうなりますか?

#!/bin/bash
var1=${1,,}
var2=${2,,}

./script.sh value1 value2

答え1

それパラメータ拡張と言うケースの修正(望むよりman bash)。

$var1最初の引数は、小文字に変換されたすべての文字に含まれます。 Singleは,パラメータの最初の文字のみを変更します。

次のような小文字のコレクションなど、コンマの後の各文字のパターンを指定できます。

x=$(echo {A..Z})
echo ${x,,[AEIOU]}

出力:

a B C D e F G H i J K L M N o P Q R S T u V W X Y Z

対称的に大文字に変換を使用できます^

答え2

man bash | grep -B1 -A10 ,,
       ${parameter,pattern}
       ${parameter,,pattern}
              Case modification.  This expansion modifies the case  of  alpha‐
              betic  characters in parameter.  The pattern is expanded to pro‐
              duce a pattern just as in pathname expansion.  Each character in
              the  expanded value of parameter is tested against pattern, and,
              if it matches the pattern, its case is converted.   The  pattern
              should  not  attempt  to  match  more than one character.  The ^
              operator converts lowercase letters matching pattern  to  upper‐
              case; the , operator converts matching uppercase letters to low‐
              ercase.  The ^^ and ,, expansions convert each matched character
              in  the expanded value; the ^ and , expansions match and convert
              only the first character in the expanded value.  If  pattern  is
              omitted,  it is treated like a ?, which matches every character.
              If parameter is @ or  *,  the  case  modification  operation  is
              applied  to each positional parameter in turn, and the expansion
              is the resultant list.  If parameter is an array  variable  sub‐
              scripted with @ or *, the case modification operation is applied
              to each member of the array in turn, and the  expansion  is  the
              resultant list.

関連情報