| 表現 | 変数があれば | 変数が空なら (:なしは定義済みかどうか) | 三項演算子風表現 | 
|---|---|---|---|
| ${変数名:-文字列} | 変数の中身を返す | 文字列を返す | 変数 ? 変数 : 文字列 | 
| ${変数名:=文字列} | 変数の中身を返す | 変数に文字列を代入し、変数の中身を返す | 変数 ? 変数 : (変数 = 文字列) | 
| ${変数名:?文字列} | 変数の中身を返す | 文字列を出力し終了する | 変数 ? 変数 : abort(文字列) | 
| ${変数名:+文字列} | 文字列を返す | 空を返す | 変数 ? 文字列 : '' | 
| 表現 | 説明 | 
|---|---|
| ${変数名:位置} | n文字目から末尾まで表示。1文字目は0 | 
| ${変数名:位置:長さ} | n文字目から長さ分表示 | 
| ${変数名^} | 1文字目を大文字にする | 
| ${変数名^^} | 全部を大文字にする | 
| ${変数名,} | 1文字目を小文字にする | 
| ${変数名,,} | 全部を小文字にする | 
| ${変数名~} | 1文字目を大文字小文字反転する | 
| ${変数名~~} | 全部を大文字小文字反転する | 
| 表現 | 説明 | 例1 (/foo/bar/baz) | 例2 (foo/bar/baz) | 
|---|---|---|---|
| ${変数名#パターン} | 先頭パターンマッチ部分(最短)を削除 | ${var#*/} => foo/bar/baz | 
${var#*/} => bar/baz | 
| ${変数名##パターン} | 先頭パターンマッチ部分(最長)を削除 | ${var##*/} => baz (basename) | 
${var##*/} => baz | 
| ${変数名%パターン} | 末尾パターンマッチ部分(最短)を削除 | ${var%/*} => /foo/bar (dirname) | 
${var%/*} => foo/bar | 
| ${変数名%%パターン} | 末尾パターンマッチ部分(最長)を削除 | ${var%%/*} => | 
${var%%/*} => foo | 
| 表現 | 説明 | 例 (a,b,c) | 
|---|---|---|
| ${変数名/パターン/文字列} | 最初のパターンマッチ部分を文字列に置換 | ${var/,/;} => a;b,c | 
| ${変数名//パターン/文字列} | 全部のパターンマッチ部分を文字列に置換 | ${var//,/;} => a;b;c | 
- shopt -s extglob でもっと複雑なパターンが使用可能