將命令的輸出儲存到變數中

將命令的輸出儲存到變數中

此指令為名稱為 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

相關內容