명령의 출력을 변수에 저장

명령의 출력을 변수에 저장

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

관련 정보