명령 출력을 변수로 보낼 때 형식을 유지하시겠습니까? [복사]

명령 출력을 변수로 보낼 때 형식을 유지하시겠습니까? [복사]

bash 스크립트가 있습니다. 이 명령을 실행하면:

  1. 특정 패턴에 대한 grep,
  2. 변환 출력,
  3. 출력 정렬
  4. 출력 중복 제거

그런 다음 터미널에서 줄당 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

관련 정보