bashの変数展開について考えてみます。
bashの変数展開には色々あって、man bashで調べてみると数多くの物があります。
今回は、その中でシェルスクリプトの作成などで使えそうなものを紹介します。
## 変数のデフォルト値を設定する
```bash
# parameterがunset or nullならdefaultvalを使う
echo "${parameter:-defaultval}"
# parameterがunset or nullならdefaultvalを使う + parameterに代入する
echo "${parameter:=default value}"
# parameterがunset or nullならErrorを表示する
echo "${parameter:?error message}"
```
## 文字を切り出す
切り出したい文字列の位置や長さが決まっている時には、offsetとlengthを指定して、文字を切り出すことができます。
```bash
parameter="All work and no play makes Jack a dull boy."
# 指定したより後の文字列を返す
echo "${parameter:16}" # play makes Jack a dull boy.
# 指定した位置から, 指定したサイズ文取り出す
echo "${parameter:16:4}" # play
```
## 指定した文字を削除する
最長一致や最短一致で文字を削除することができます。
```bash
parameter="/Users/hoge/foo/bar/test.txt"
echo "${parameter}"
# /Users/hoge/foo/bar/test.txt
echo "${parameter#/*/}" # 先頭から最短一致で削除
# hoge/foo/bar/test.txt
echo "${parameter##/*/}" # 先頭から最長一致で削除 (このパターンはパスからファイル名を取得できる)
# test.txt
echo "${parameter%/*}" # 末尾から最短一致で削除 (ファイルのフォルダのパスになる)
# /Users/hoge/foo/bar
echo "${parameter%%/foo*}" # 末尾から最長一致で削除
# /Users/hoge
```
## 一致した文字列を置き換える
簡単な置き換えなら、変数展開で行うことができます。
複雑な置き換えなら、sedとか使うのが良いと思います。
```bash
parameter="All work and no play makes Jack a dull boy."
echo "${parameter/Jack/Alice}"
# All work and no play makes Alice a dull boy.
# /をつけてpatternを書くと、全て置き換えられる
echo "${parameter//ll/AA}"
# AAA work and no play makes Jack a duAA boy.
```
0 件のコメント :
コメントを投稿