쉘에서 줄 바꿈을 표현하는 방법은 무엇입니까?

쉘에서 줄 바꿈을 표현하는 방법은 무엇입니까?

나는 debian7.8 bash 쉘을 사용하고 있습니다.

str="deb http://ftp.cn.debian.org/debian/ wheezy main contrib non-free  \n  
      deb-src http://ftp.cn.debian.org/debian/ wheezy main contrib non-free  "

echo $str > test  

내 테스트 파일에서는 다음과 같습니다.

deb http://ftp.cn.debian.org/debian/ wheezy main contrib non-free \n deb-src http://ftp.cn.debian.org/debian/ wheezy main contrib non-free

내가 원하는 것은:

deb http://ftp.cn.debian.org/debian/ wheezy main contrib non-free 
deb-src http://ftp.cn.debian.org/debian/ wheezy main contrib non-free

줄 바꿈을 올바르게 표현하는 방법은 무엇입니까?

답변1

Jasonwryan의 제안 외에도 다음을 사용하는 것이 좋습니다 printf.

$ printf "%s http://ftp.cn.debian.org/debian/ wheezy main contrib non-free\n" deb deb-src > test
$ cat test
deb http://ftp.cn.debian.org/debian/ wheezy main contrib non-free
deb-src http://ftp.cn.debian.org/debian/ wheezy main contrib non-free

printf형식 문자열은 인수가 소진될 때까지 재사용되므로 반복되는 줄을 인쇄하는 좋은 방법을 제공합니다 .

답변2

따옴표 안에 실제 개행 문자를 포함시키기만 하면 됩니다(작은따옴표나 큰따옴표와 함께 사용 가능). 두 번째 줄을 들여쓰면 공백이 문자열의 일부가 됩니다. 또한변수 대체에는 항상 큰따옴표를 사용하십시오..

str="deb http://ftp.cn.debian.org/debian/ wheezy main contrib non-free
deb-src http://ftp.cn.debian.org/debian/ wheezy main contrib non-free"
echo "$str" > test

$'…'Ksh, bash 및 zsh(일반 sh는 아님) 에는 백슬래시가 C와 유사한 이스케이프 시퀀스를 시작하는 대체 인용 구문이 있으므로 \n개행을 나타내기 위해 작성할 수 있습니다. 귀하의 경우에는 읽기가 어렵습니다.

str=$'deb http://ftp.cn.debian.org/debian/ wheezy main contrib non-free\ndeb-src http://ftp.cn.debian.org/debian/ wheezy main contrib non-free'
echo "$str" > test

여기 문서일반적으로 여러 줄 문자열을 표시하는 더 읽기 쉬운 방법입니다. 여기서 문서는 명령줄 인수가 아닌 명령의 표준 입력으로 전달됩니다.

cat <<EOF >test
deb http://ftp.cn.debian.org/debian/ wheezy main contrib non-free
deb-src http://ftp.cn.debian.org/debian/ wheezy main contrib non-free
EOF

1 또는 더 일반적으로는 대체 파일 설명자를 지정한 경우 입력으로 사용됩니다.

답변3

echo -e한 가지 옵션은 확장된 이스케이프 시퀀스를 사용하는 것입니다 . 두 번째 옵션은 단순히 "리터럴" 개행 문자를 사용하는 것입니다( 에서 작동함 bash).

str = "deb ... non-free  "$'\n'"deb-src ... non-free  "
echo "$str"

$'···'삽입된 텍스트의 기호를 참고하세요 .

그러나 이러한 변수에 줄바꿈을 추가하는 것은 좋은 생각이 아닙니다. 스크립트를 읽는 것은 어렵고 "$str"이스케이프 시퀀스(사용된 경우)를 이해하지 못 \n하거나 단어 분리(대소문자)를 사용하는 다른 프로그램에 제공되면 $''어리석은 버그와 원치 않는 동작이 발생할 수 있습니다 . 배열을 사용하고 반복하면 행이 더 많아지면 확장성이 높아집니다.

코드의 한 위치에만 넣으려면 두 개의 echo 명령으로 분할해야 합니다. 그러면 적어도 잘못되지는 않습니다.

파일에 저장하고 싶다면 또 다른 흥미롭고 아마도 가장 좋은 솔루션이 여기에 문서화되어 있습니다.

cat > test <<EOF
deb http://ftp.cn.debian.org/debian/ wheezy main contrib non-free
deb-src http://ftp.cn.debian.org/debian/ wheezy main contrib non-free
EOF

추가 자료: https://stackoverflow.com/questions/9139401/trying-to-embed-newline-in-a-variable-in-bash

관련 정보