コマンドの出力を変数に保存する

コマンドの出力を変数に保存する

このコマンドは、mp3 形式のmid3v2 -l someFile.mp3 名前のファイルに対して次の出力を生成します。someFile.mp3

IDv2 tag info for someFile.mp3
APIC=cover front,  (image/jpg, 52016 bytes)
TALB=someAlbumName
TCON=amusicGenre
TDRC=2000
TIT2=songname
TPE1=singer
TPE2=singer
TRCK=1

TPE1 の値を変数に保存して、tさらに処理したいと思います。どうすればいいでしょうか?

答え1

この質問に答える方法はたくさんあります。
最初のステップは、コマンドの出力がパイプ経由で他のコマンドによって受信されるか、変数にキャプチャされる可能性があることを理解することです。

cmd | next command ... etc
var=$(cmd)

行を選択し、さらに記号の後にあるものを選択するプロセスは=「テキスト処理」と呼ばれ、シェルはそれを実行するのに適していません。

一般的な方法は sed です:

 $ mid3v2 -l someFile.mp3 | sed -En 's/^TPE1=(.*)$/\1/p'
 Singer

そして結果を変数にキャプチャします。

$ t=$(mid3v2 -l someFile.mp3 | sed -En 's/^TPE1=(.*)$/\1/p')
$ echo "$t"
Singer

単純なシェル内には、単純な同等のものはありません。より高次のシェル (ksh、bash、zsh) では、正規表現を使用できます。どのシェルを使用していますか?

答え2

シェルが「プロセス置換」を提供している場合は、結果を「ソース化」してみるとよいでしょう。

. <(mid3v2 -l someFile.mp3 | grep -o "[^ ]*=[^ ]*")
t=$TPE1

関連情報