특정 출력을 쉘 변수에 저장

특정 출력을 쉘 변수에 저장

svn info추가 처리를 위해 명령의 출력(보다 정확하게는 개정 번호)을 변수에 저장하고 싶습니다 . 단지 저장 공간이 필요할 뿐입니다 4.

$ svn info
[...]
Revision: 4
[...]

답변1

awk를 사용하세요

awk는 이에 대해 훌륭하게 작동합니다.

rev=$(svn info | awk '/Revision:/{print $2}')

위의 코드는명령 대체, $(...)는 명령의 출력을 캡처하여 변수에 할당합니다.

위 코드에서 awk는 출력을 읽고 svn info문자열이 포함된 줄을 기다립니다 Revision:. 행이 발견되면 행의 두 번째 필드(개정 번호)를 인쇄합니다.

sed 사용

sed를 사용하여 이 작업을 수행할 수도 있습니다.

rev=$(svn info | sed -n '/Revision:/ s/.* //p')

-n옵션을 사용하면 sed는 명시적으로 요청할 때만 인쇄합니다. /Revision:/문자열이 포함된 행을 선택합니다 Revision:. 이러한 줄의 경우 바꾸기 명령을 실행하고 줄의 마지막 공백까지 모든 문자를 제거한 다음 이 p옵션에 따라 줄을 인쇄합니다.

쉘을 사용하다

while read -r name value
do 
    [ "$name" = Revision: ] && var="$value"
done < <(svn info)

위에서 리디렉션이 사용되었습니다.프로세스 교체, , 는 while 루프에 < <(...)대한 출력을 제공합니다 . svn info루프가 반복될 때마다 줄의 첫 번째 단어가 에 할당되고 name나머지 줄은 에 할당됩니다 value. 그렇다면 쉘 변수는 name개정 번호인 에 할당됩니다 .Revision:varvalue

전부는 아니지만 많은 쉘이 프로세스 대체를 지원합니다. 위에서 언급한 것처럼 리디렉션이 프로세스 교체와 결합되면 둘 사이의 공간이 <중요합니다.

관련 정보