将命令的输出保存到变量中

将命令的输出保存到变量中

该命令为名称为 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)

选择一行并进一步选择符号后面的内容的过程=称为“文本处理”,而 shell 不太适合执行此操作。

一种常见的方法是 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

简单 shell 内没有简单的等价物。在更高的 shell(ksh、bash、zsh)上可以使用正则表达式。您使用哪种外壳?

答案2

鉴于您的 shell 提供了“进程替换”,您可以尝试“采购”结果:

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

相关内容