나는 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