変数を特定条件に従って展開する[[Bash]]の仕様。 > [!caution] > `${parameter^pattern}` のような小文字・大文字変換は[[Bash]]4未満では未サポートのため除外している。[[macOS]]はライセンスの都合で[[Bash]]のバージョンが3系らしい。 ## `${parameter:−word}` `parameter` が未設定またはnullの場合 - `word`で指定された結果を返す - `parameter` の値は上書きされない ```bash x=123 y= echo "${x:-default}" # 123 echo "${y:-default}" # default echo "$x" # 123 echo "$y" # ``` ## `${parameter:=word}` `parameter` が未設定またはnullの場合 - `word`で指定された結果を返す - **`parameter`の値は上書きされる** ```bash x=123 y= echo "${x:-default}" # 123 echo "${y:-default}" # default echo "$x" # 123 echo "$y" # default ``` ## `${parameter:?word}` `parameter` が未設定またはnullの場合 - `word`のメッセージを[[標準エラー出力]]に出力する - 0以外のステータスで処理を終了する ```bash x=123 y= echo "${x:?error message}" # 123 echo "${y:?error message}" # ./index.sh: line 7: y: error message echo "$x" echo "$y" ``` ## `${parameter:+word}` `parameter` が未設定またはnullの場合 - nullを返す - `parameter` の値は上書きされない ```bash x=123 y= echo "${x:+default}" # default echo "${y:+default}" # echo "$x" # 123 echo "$y" # ``` ## `${parameter:offset:length}` `parameter` の 位置`offset` から `limit`文字 だけ返す。`length` が省略された場合は `parameter` の最後まで。 ```bash x=123456789 y= echo "${x:2}" # 3456789 echo "$x" # 123456789 echo "${x:2:5}" # 34567 echo "$x" # 123456789 echo "${y:2:5}" # ``` ## `${parameter#pattern}` `parameter` から `pattern` の[[glob]]に**先頭から最短マッチ**した部分を**削除した残り**を返す。 ```bash x=ab.cd.ef.gh echo "${x#*.}" # cd.ef.gh echo $x # ab.cd.ef.gh ``` ## `${parameter##pattern}` `parameter` から `pattern` の[[glob]]に**先頭から最長マッチ**した部分を**削除した残り**を返す。 ```bash x=ab.cd.ef.gh echo "${x##*.}" # gh echo $x # ab.cd.ef.gh ``` ## `${parameter%pattern} `parameter` から `pattern` の[[glob]]に**末尾から最短マッチ**した部分を**削除した残り**を返す。 ```bash x=ab.cd.ef.gh echo "${x%.*}" # ab.cd.ef echo $x # ab.cd.ef.gh ``` ## `${parameter%%pattern} `parameter` から `pattern` の[[glob]]に**末尾から最長マッチ**した部分を**削除した残り**を返す。 ```bash x=ab.cd.ef.gh echo "${x%%.*}" # ab echo $x # ab.cd.ef.gh ``` ## `${parameter/pattern/string} `parameter` から `pattern` の[[glob]]に**最初に一致した文字列**が `string` で置換される。 ```bash x=ab.cd.ef.gh echo "${x/./-}" # ab-cd.ef.gh echo $x # ab.cd.ef.gh ``` ## `${parameter//pattern/string} `parameter` から `pattern` の[[glob]]に**一致したすべての文字列**が `string` で置換される。 ```bash x=ab.cd.ef.gh echo "${x//./-}" # ab-cd-ef-gh echo $x # ab.cd.ef.gh ```