<<
<
1
>
>>
今年はできるだけBashでスクリプトを書くことにしていました。
今までコマンドの羅列程度だったので、色々な便利機能を知って世界が開けましたね。
中でも、その便利さに驚かされるのが変数展開。
変数展開と一口に言っても色々あるんでまとめてみました。
例えば
これは基本なんだろうけど、それまではバッククォートによるコマンド置換しか知らなかった。
こっちのが断然見やすいですね。
後、findの結果をその後ループするなら区切り文字を改行にしておきます。
これでコードがかなり簡潔にかけるのに知らなかった。
$file_nameには"emerge.log"が入ります。
カッコの中身を展開してくれる機能です。
bashスクリプトの世界は奥が深いですね。
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スクリプトの世界は奥が深いですね。