ユーザ用ツール

サイト用ツール


サイドバー

このページの翻訳:



最近の更新



Tag Cloud

bash:03_special_variable

03 特殊な変数展開

変数にすでに値が入っている場合と何も値が入っていない場合で、動作が異なる代入/参照方法があります。

変数に値が代入されていれば新たにそこには代入しないけれど、値が入っていないときには代入しよう、というif文的な動作をする書き方です。

変数 説明
${VAR:-word} 変数VARに値が入っていないならwordを値として返す。
${VAR:=word} 変数VARに値が入っていないならwordを代入する。
${VAR:?word} 変数VARに値が入っていないならwordを出力する。
${VAR:+word} 変数VARに値が入っているならwordを代入する。

Bashで追加された拡張的な変数展開

変数の値を切り出す

${variable:offset}
${variable:offset:length}

マイナスを入れると後ろから指定

${variable: -offset}
${variable: -offset:length}

変数variableに代入されている値に対して、offset番目からlength分の文字列を切り出します。

最初の文字列が0番目です。lengthを省略すると最後までとして解釈します。

  • 変数VARの値の2番目から6個を切り出す。
  $ VAR=0123456789
  $ echo ${VAR:2:6}
  234567

合致する変数名を表示

${!prefix*}

文字列prefixで始まる名前の変数名を全て表示します。

  • VAR*と合致する変数名を全て表示する。
  $ VAR_1=0123
  $ VAR_2=abcd
  $ VAR_3=wxyz
  $ echo ${!VAR*}
  VAR_1 VAR_2 VAR_3

値の文字数を表示する

${#variable}

変数variableに代入されている値(文字列)の文字数を表示します。

$#は位置パラメータの個数を表示しますが、それによく似ています。

  • 変数VAR1とVAR2の文字数を表示する。
  $ VAR1=0123
  $ VAR2="abcd xyz"
  $ echo ${#VAR1}
  4
  $ echo ${#VAR2}
  8

値を文字列指定(前方一致)で削除

${variable#word}
${variable##word}

変数variableに代入されている値(文字列)の

先頭部分が文字列wordに合致する時に、そこまでの文字列を削除します。

#が1個だと最短一致パターンとなり、2個だと最長一致パターンとで判断します。

文字列指定にはワイルドカードが使えます。

  • 変数VARに代入されている値から最短一致でabcを削除
  $ VAR=abc1234xyz987abcd1234efg
  $ echo ${VAR#abc}
  123xyz987abcd1234efg
  • 変数VARに代入されている値から最短一致でaで始まって2で終わる文字列を削除
 $ echo ${VAR#a*2}
 3xyz987abcd1234efg
  • 変数VARに代入されている値から最長一致でaで始まって2で終わる文字列を削除
 $ echo ${VAR##a*2}
 34efg
  • 変数VARに代入されている値から最短一致で1234を削除
 $ echo ${VAR#*1234}
 xyz987abcd1234efg
  • 変数VARに代入されている値から最長一致で1234を削除
 $ echo ${VAR##*1234}
 efg

値を文字列指定(後方一致)で削除する。

${variable%word}
${variable%%word}

変数variableの値(文字列)のうち、後方部分が文字列wordに合致する場合はそこまでの部分を削除します。

%が1個だと最短一致パターンとなり、2個だと最長一致パターンとで判断します。

文字列指定にはワイルドカードが使えます。

  • 最後尾の1234を削除
$ VAR=abcd1234xyz987abcd1234
$ echo ${VAR%1234}
abcd1234xyz987abcd
  • 変数VARに代入されている値から最後尾の最短一致でdで始まって4で終わる文字列を削除
$ echo ${VAR%d*4}
abc
  • 変数VARに代入されている値から最後尾最長一致でdで始まって4で終わる文字列を削除
$ echo ${VAR%%d*4}
34efg
  • 変数VARに代入されている値から最後尾最短一致で34を削除
$ echo ${VAR%34*}
abcd1234xyz987abcd12
  • 変数VARに代入されている値から最後尾最長一致で34を削除
$ echo ${VAR%%34*}
abcd12

値を文字列指定で置き換える

${variable/pattern/string}
${variable//pattern/string}

変数variableの値(文字列)が文字列パターンpatternに合致すればその部分を文字列stringに置き換えます。

patternにはワイルドカードが利用できる為、最短一致と最長一致とが使えます。

/が1個は最短一致で、2個の時は一致する全てを置き換えます。

最短一致で1234をAAAに置き換える

  $ VAR=abcd1234xyz987abcd1234abcd
  $ echo ${VAR/1234/AAA}
  abcdAAAxyz987abcd1234abcd

最長一致で1234をAAAに置き換える

  $ VAR=abcd1234xyz987abcd1234abcd
  $ echo ${VAR/1234//AAA}
  abcdAAAxyz987abcdAAAabcd

1で始まりaで終わる部分をBBBに置き換える

  $ VAR=abcd1234xyz987abcd1234abcd
  $ echo ${VAR/1*a/BBB}
  abcdBBBbcd
bash/03_special_variable.txt · 最終更新: 2022/01/21 18:10 by matsui