명령의 출력을 변수에 저장

명령의 출력을 변수에 저장

이 명령은 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

t추가 처리를 위해 TPE1의 값을 변수에 저장하고 싶습니다 . 어떻게 해야 하나요?

답변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

관련 정보