2012-01-03 5 views
8

저는 bash에서 스크립트를 작성 중이며 명령을 실행하고 각 행을 개별적으로 처리하려고합니다.변수 내에 다중 행 출력을 배치하십시오.

LINES=$(df) 
echo $LINES 

공백이있는 모든 출력 변환 새 행을 반환합니다.

예 : 출력 있어야 할 경우

:

다음
1 
2 
3 

나는 새를 허용하는 변수로 명령의 출력을 배치 할 수있는 방법

1 2 3 

를 얻을 것 라인은 여전히 ​​새로운 라인이되므로 변수를 출력 할 때 적절한 출력을 얻을 수 있습니까?

답변

11

일반적으로 bash에서 $v은 대부분의 경우 문제를 요구합니다. 거의 항상 당신이 의미하는 것은 "$v" 큰 따옴표입니다.

LINES="`df`"  # double-quote + backtick 
echo "$LINES" 
OLDPATH="$PATH" 
+6

사실 변수에 할당 할 때 확장 결과가 단어 분리되지 않기 때문에 따옴표가 필요하지 않습니다. 그러나 그들은 아무런 상처를주지 않으며 모든 확장 주위에 큰 따옴표를 타이핑하기 위해 근육 기억을 훈련하는 것이 더 쉽습니다. –

+0

잘 고맙습니다. 감사합니다. – kubanczyk

6

아니요, 그렇지 않습니다. $(something)은 줄 바꿈 줄 바꿈 만 제거합니다.

공백 및 에코에서의 인수 확장은 별도의 인수를 공백으로 연결합니다. 할당이 인용 될 하지 필요가하는,

echo "$LINES" 

참고; 공백을 유지하려면 다시 인용 할 필요가 확장 결과는 변수에 대입 할 때 단어 분리가되지 않으며, 인수는 case입니다. 그러나 따옴표를 붙일 수 있으며 단지 항상 따옴표를 넣는 것을 배우는 것이 더 쉽습니다.

+0

정말입니까? 예상되는 결과는'LINES = $ (df); echo "$ {LINES}"', 아마도 우리 환경에서는 IFS가 다릅니다. 여전히 '$ (df)'가 @ kubanczyk의 대답 – nhed

+0

@nhed의 단일 백틱 쿼트 (backtick quotes)보다 낫습니다. – kubanczyk

+0

@nhed : 오른쪽 ... 변수에 대입하면 결코 분할되지 않습니다. 나는 여기서 그것을 테스트 할 때 뭔가 다른 것으로부터 오는 것으로 밝혀진 오류 메시지에 혼란스러워했다. –