#!/bin/bash
for a in ./*.flac; do
ffmpeg -i "$a" -qscale:a 0 "${a[@]/%flac/mp3}"
done
私は数日前に現在のディレクトリのすべてのFLACファイルをMP3形式に変換できるこのスクリプトを見つけました。
私が理解していないのはここの"${a[@]/%flac/mp3}"
部分です。現在のファイル名の終わりflacをmp3に変更するようです。ところで、[@]
この部分が正確にどんな役割を果たしているのでしょうか?正規表現ですか?
答え1
推測できるように、値の${var/%flac/mp3}
終わり"flac"
(ある場合)を$var
に置き換えます"mp3"
。"${var[@]/%flac/mp3}"
同じことをする各${var[@]}
ifの出力要素var
は配列です。
ここではa
配列ではないので削除できます。[@]
(これは以前のプログラマーの試みの遺産だと思います。)
答え2
これは単純なシェル拡張を作成します。この変数はglobと一致するすべてのファイルをa
繰り返します*.flac
。
各項目はファイルなので(ファイル名にスペースがないと仮定)、これは拡張子のfoo.flac
拡張になります。$a
${a[@]}
この構造は変数の末尾のをに${var/%foo/bar}
置き換えます。foo
したがって、拡張子を例の拡張子に置き換えて、出力ファイル名を提供します。bar
var
flac
mp3
ffmpeg