![명령 출력을 변수로 보낼 때 형식을 유지하시겠습니까? [복사]](https://linux55.com/image/40843/%EB%AA%85%EB%A0%B9%20%EC%B6%9C%EB%A0%A5%EC%9D%84%20%EB%B3%80%EC%88%98%EB%A1%9C%20%EB%B3%B4%EB%82%BC%20%EB%95%8C%20%ED%98%95%EC%8B%9D%EC%9D%84%20%EC%9C%A0%EC%A7%80%ED%95%98%EC%8B%9C%EA%B2%A0%EC%8A%B5%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
bash 스크립트가 있습니다. 이 명령을 실행하면:
- 특정 패턴에 대한 grep,
- 변환 출력,
- 출력 정렬
- 출력 중복 제거
그런 다음 터미널에서 줄당 grep 찾기를 얻습니다.
LC_ALL=C grep -o --color -h -E -C 0 -r "$pattern" /pathto/Pre_N/ | tr -d '[:digit:]' | sort | uniq
그러나 출력 변수에 넣으면 형식이 손실됩니다(파일에 에코되거나 화면에 에코되는 경우).
#!/usr/bin/env bash
output=$(LC_ALL=C grep -o --color -h -E -C 0 -r "$pattern" /pathto/Pre_N/ | tr -d '[:digit:]' | sort | uniq)
echo $output > $fn
명령 출력을 변수에 저장한 후 명령 출력 형식을 어떻게 보존할 수 있습니까?
답변1
따옴표 사용:
echo "$output" > $fn
에코 라인은 (변수 확장 후) 쉘에 의해 구문 분석되며 인수 사이의 모든 공백 문자는 단순 공백으로 축소됩니다. 예를 들어:
$ var1="toto
> titi
> tutu
> "
$ echo $var1
toto titi tutu
$ echo "$var1"
toto
titi
tutu