2016-06-29 4 views
9

변수가 여러 개있는 값으로 할당되어야하는 FOO이 있습니다. 내가 FOO의 값을 인쇄 할 때 이런 식으로 뭔가,bash 변수에 여러 행 값을 할당하는 방법

FOO="This is line 1 
    This is line 2 
    This is line 3" 

그래서 다음과 같은 출력을 제공해야합니다.

echo $FOO 
output: 
This is line 1 
This is line 2 
This is line 3 

또한 루프 수를 사용하여 초기화 할 때 줄 수는 동적으로 결정됩니다.

주로 read -d을 사용하여 다른 질문에 표시된 대답은 집중적 인 문자열 연산을 수행하고 코드 형식도 중요하므로 저에게 적합하지 않습니다.

+2

제거 선도 공백이 라인 1 입니다 -e '에코 "$의 FOO"와 같은' – Cyrus

답변

22

에서 현명한 단어 라인을 들여하지 마십시오 또는 당신은 여분의 공간을 얻을 수 있습니다. "$FOO"을 확장 할 때 따옴표를 사용하여 줄 바꿈이 유지되는지 확인하십시오.

$ FOO="This is line 1 
This is line 2 
This is line 3" 
$ echo "$FOO" 
This is line 1 
This is line 2 
This is line 3 

또 다른 방법은 \n 이스케이프 시퀀스를 사용하는 것입니다. 그들은 $'...' 문자열 내부로 해석됩니다.

$ FOO=$'This is line 1\nThis is line 2\nThis is line 3' 
$ echo "$FOO" 

세 번째 방법은 문자 \n 저장 한 다음 echo -e는 이스케이프 시퀀스를 해석하는 것입니다. 그것은 미묘한 차이입니다. 중요한 부분은 \n이 일반 따옴표 안에 해석되어 있지 않다는 것입니다.

$ FOO='This is line 1\nThis is line 2\nThis is line 3' 
$ echo -e "$FOO" 
This is line 1 
This is line 2 
This is line 3 

당신은 당신이 -e 옵션을 제거하고 echo 인쇄 아무것도 해석하지 않고 원시 문자열이 있으면 내가 만들고있어 차이를 볼 수 있습니다. 라인 2, 3 및 사용

$ echo "$FOO" 
This is line 1\nThis is line 2\nThis is line 3 
+0

안녕하세요 John, 예제 코드가 작동합니다! 그러나 위의 첫 번째 예에서 따옴표 사이에 $ FOO를 넣지 않고'''echo $ FOO'''를 사용하여 변수를 반향 출력하면 출력은 같은 줄에 있습니다. 왜 그런지 알아? 나는 우분투 14.04에서 GNU bash 버전 4.3.11 (1) -release를 사용하고 있습니다. – yaobin

+0

따옴표가 없으면 어떻게 될까요? 값은 * 단어 분리 * 및 * glob 확장 *의 영향을받습니다. 'echo '가 개행 문자로 한 인수를 출력하도록 명령하는 대신'$ FOO'의 각 단어는 개행 문자가없는 별도의 인수가됩니다. 그것은 마치 여러분이'echo 1 행 2 이것은 행 3입니다. '라고 썼던 것과 같습니다. 결론 : 실제로 단어 분리와 globbing (희귀)의 영향을받지 않는 한 항상 변수 확장을 인용하십시오. –

3

FOO을 초기화 할 때 줄 바꿈 : \n을 사용해야합니다.

FOO="This is line 1\nThis is line 2\nThis is line 3" 

이어서 출력 FOOecho -e를 사용한다. 문자 n 다음,

"..." 내부 \n 줄 바꿈이 아닌 것을주의하는 것이 중요하지만 \ 문자. echo -e으로 해석 될 때만이 리터럴 시퀀스가 ​​개행 문자로 변환되는 경우에만 입니다. - mklement0


#!/bin/bash 

FOO="This is line 1\nThis is line 2\nThis is line 3" 
echo -e $FOO 

Output: 
This is line 1 
This is line 2 
This is line 3 
+0

그 제공 출력'이이 라인 3' – juned

+0

감사입니다 라인이 입니다. 나를 위해 일하고. – molecule

+2

@juned'-e'를 지원하는'echo' 버전이 필요합니다. Bash의 내장 echo 명령은 GNU의'/ bin/echo' 바이너리와 같습니다. –

관련 문제