Geek-Side

<< < 1 > >>

Bashの変数展開色々


今年はできるだけBashでスクリプトを書くことにしていました。
今までコマンドの羅列程度だったので、色々な便利機能を知って世界が開けましたね。
中でも、その便利さに驚かされるのが変数展開。
変数展開と一口に言っても色々あるんでまとめてみました。

コマンド置換

$(コマンド)の形式でコマンド結果を変数に入れる方法。
例えば
 # jpg拡張子のファイルを検索する。
 files=$(find / -iname "*jpg")

これは基本なんだろうけど、それまではバッククォートによるコマンド置換しか知らなかった。
こっちのが断然見やすいですね。
後、findの結果をその後ループするなら区切り文字を改行にしておきます。
 export IFS=$'n'

変数展開

文字列操作をしなくても、パターンマッチで一発で変数内の文字列を操作できる機能です。
これでコードがかなり簡潔にかけるのに知らなかった。

 file=/var/log/emerge.log 
 file_name=${file##*/}

$file_nameには"emerge.log"が入ります。

変数展開 説明 file=/var/log/emerge.logの時
${変数%パターン} 末尾からの最短一致を取り除く ${file%.*/} -> /var/log/emerge
${変数%%パターン} 末尾からの最長一致を取り除く ${file%%*/} -> /var/log/emerge.log
${変数#パターン} 先頭からの最短一致を取り除く ${file#*/} -> var/log/emerge.log
${変数##パターン} 先頭からの最長一致を取り除く ${file##*/} -> emerge.log


ブレース展開


カッコの中身を展開してくれる機能です。
 $ mkdir -p hoge/{foo,bar}
 $ ls hoge/
 bar  foo

bashスクリプトの世界は奥が深いですね。