パラメータ展開

書式 説明
${value} 変数valueの値を展開
${value:-hoge} 変数valueの値を展開するが、valueが未設定か空文字の場合はhogeの値を展開
${value:=hoge} 変数valueの値を展開するが、valueが未設定か空文字の場合はhogeの値を展開し更にvalueに代入
${value:?hoge} 変数valueの値を展開するが、valueが未設定か空文字の場合はhogeの値を展開し更に標準エラー出力
${value:+hoge} 変数valueの値を展開するが、valueが未設定か空文字の場合は空文字として処理
${value:offset} 変数valueの値を展開する際、offsetの位置から展開
${value:offset:length} 変数valueの値を展開する際、offsetの位置から最大length文字分を展開
${!hoge*} ${!hoge@} hogeで始まる全ての変数を、特殊変数IFSの最初の文字(デフォルト空白)で区切って展開
${hoge[*]} ${!hoge[@]} hogeが配列変数であれば、配列hogeの値のリストを展開。hogeが配列でない場合、hogeの値に展開
${!hoge[*]} ${!hoge[@]} hogeが配列変数であれば、配列hogeのキーリストを展開。hogeが配列でない場合、空文字として展開
${#hoge} ${#hoge[*]} ${#hoge[@]} 文字列数、要素数を出力
${hoge#word} ${hoge##word} hogeを展開し、前方からwordに一致した分まで削除して出力、#は最初にマッチした部分までで、##は最後にマッチした部分まで削除
${hoge%word} ${hoge%%word} hogeを展開し、後方からwordに一致した分まで削除して出力、%は最初にマッチした部分までで、%%は最後にマッチした部分まで削除
${hoge/pattern/word} hogeを展開し、patternに一致した最後の部分までをwordに置換してから出力

補記事項

配列の代入と展開結果例
$ value=([0]="zero" [1]="one" [2]="two" [3]="three")
$ echo $value
zero
$ echo ${value[1]}
one
$ echo ${value[*]}
zero one two three
$ echo ${!value[*]}
0 1 2 3
$ value=(["z"]="zero" ["o"]="one" ["tw"]="two" ["th"]="three")
$ echo ${!value[*]}
z o tw th