출력을 변수로 리디렉션합니까?


9

두 명령의 출력을 변수로 지정하는 데 흥미 롭습니다. 출력이 화면에 표시되는 것을 원하지 않지만 대신 다시 사용할 수 있도록 스크립트 내의 변수에 할당됩니다.

내가하고있는 일은 아래 표시된 명령을 사용하여 디렉토리에서 파일 크기를 얻는 것입니다.

ls -l /var/spool | wc -c

이 명령은 파일 크기를 바이트 단위로 가져 와서 출력을 정수로 표시합니다. 이 정수를 원하는 변수에 할당하여 나중에 다른 변수와 비교할 수 있습니다.

이것은 작동하지 않는 것 같습니다 :

size = ls -l /var/spool | wc -c

리디렉션이 작동합니까?

이렇게 ....

ls -l /var/spool | wc -c > size

어느 쪽이든이 숫자 출력을 변수에 할당하고 화면에 표시하지 않기를 원합니다.

모든 제안은 매우 환영합니다!

답변:


12

매우 간단 해 보입니다.

romano@RRyS:~$ size=$(ls -l /var/spool | wc -c)
romano@RRyS:~$ echo $size
476

쉘 구문 $(command)은을 실행 command하고 표준 출력을 반환합니다. 변수에 저장하십시오.

당신의 명령 :

ls -l /var/spool | wc -c > size 

size현재 디렉토리에 이름이 지정된 파일을 만듭니다 (번호와 줄 바꿈 포함).


또는 명령을 역 인용하십시오 size=`ls -l /var/spool | wc -c`. 답에이 형식을 사용하십시오 : " ''size =`ls -l / var / spool | wc -c```"큰 따옴표없이;)
αғsнιη

1
@KasiyA 나는 $()여기에 설명 된 이유로 사용하는 것을 선호합니다 : stackoverflow.com/a/9449788/2907484 :-)
Rmano

1
(1)하고 나면 ls -l /var/spool | wc -c > size_file할 수 read size_var < size_file있습니다. (2) 또한 명령 대체를 위해 $ ()가 항상 백틱을 대체 할 수 있습니까?를
G-Man, 'Reinstate

6

Rmano 's answer 에서 제공하는 솔루션을 선호 하지만 리디렉션 만 사용하려는 경우 :

read size < <(ls -l /var/spool | wc -c)

1
만 리디렉션을 사용하여의 주요 장점은 (- 당신이 당신의 스크립트가 파이프 처리에 설정 한 방법에 따라이 오류를 삼키는하지 않는다는 것입니다 set -e, set -o pipefail등). 따라서 $(…)스크립트 를 사용 하면 항상 계속되는 반면 리디렉션을 사용하면 실패하도록 설정할 수 있습니다. (원하는 것일 수도 있고 아닐 수도 있음).
개렛 모츠 너
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.