다음과 같이 미리 정의 된 텍스트를 파일에 쓰고 싶습니다 :
text="this is line one\n
this is line two\n
this is line three"
echo -e $text > filename
다음과 같은 것을 기대하고 있습니다 :
this is line one
this is line two
this is line three
그러나 이것을 얻었다 :
this is line one
this is line two
this is line three
각
\n
마다 공간이 없다고 생각합니다
하지만 추가 공간은 어떻게 나오나요?
- 답변 # 1
- 답변 # 2
문자열을 변수로 가져 오려는 경우 또 다른 쉬운 방법은 다음과 같습니다.
read -r -d '' VAR <<- EOM This is line 1. This is line 2. Line 3. EOM
탭으로 문자열을 들여 쓰면 (예 : '\ t') 들여 쓰기가 제거됩니다. 공백으로 들여 쓰기하면 들여 쓰기가 그대로 유지됩니다.
참고 : 마지막 닫는 괄호가 다른 줄에있는 것이 중요합니다. 와이즈 비즈 텍스트는 한 줄에 나타나야합니다.
- 답변 # 3
USAGE=$(cat <<-END This is line one. This is line two. This is line three. END )
전달 된 인수 사이에 공백을 추가합니다. 와이즈 비즈 가변 확장 및 단어 분할의 영향을 받으므로END
명령은 다음과 같습니다.echo
"this"앞에 공백이 추가 된 것을 볼 수 있습니다. 개행 문자를 제거하고
$text
를 인용 할 수 있습니다. 줄 바꿈을 유지하려면 :echo
또는
echo -e "this" "is" "line" "one\n" "this" "is" "line" "two\n" ...
를 사용할 수 있습니다$text
보다 견고하고 휴대 성이 뛰어납니다. :text="this is line one this is line two this is line three" echo "$text" > filename
printf
에서 괄호 확장을 지원하는 다음과 같은 작업도 수행 할 수 있습니다.echo
- 답변 # 4
bash 스크립트에서 다음과 같이 작동합니다 :
printf "%s\n" "this is line one" "this is line two" "this is line three" > filename
대체적으로 :
bash
고양이 파일 이름 :
printf "%s\n" "this is line "{one,two,three} > filename
- 답변 # 5
모든 줄을 올바르게 들여 쓰기 원했기 때문에 더 많은 해결책을 찾았습니다.
<올>#!/bin/sh text="this is line one\nthis is line two\nthis is line three" echo $text > filename
를 사용할 수 있습니다 :text="this is line one this is line two this is line three" echo "$text" > filename
this is line one this is line two this is line three
를 넣으면 작동하지 않습니다echo
직전에 줄 끝에.또는
echo "this is line one" \ "\n""this is line two" \ "\n""this is line three" \ > filename
를 사용할 수 있습니다 더 나은 이식성을 위해 ("\n"
에 많은 문제가 발생했습니다. ) :\
아직 다른 해결책은 다음과 같습니다.
printf
또는
echo
printf '%s\n' \ "this is line one" \ "this is line two" \ "this is line three" \ > filename
를 혼합하여 다른 솔루션을 얻을 수 있습니다 그리고text='' text="${text}this is line one\n" text="${text}this is line two\n" text="${text}this is line three\n" printf "%b" "$text" > filename
.text='' text+="this is line one\n" text+="this is line two\n" text+="this is line three\n" printf "%b" "$text" > filename
들여 쓰기 수준을 코드에 하드 코딩 할 때 이와 같은 형식의 코드를 리팩터링하는 것은 쉽지 않습니다.
도우미 함수와 몇 가지 변수 대체 트릭을 사용할 수 있습니다 :
printf
sed
관련 자료
- html - CSS에 추가 공백?
- 파이썬 문자열은 공간을 찾을 때까지 문자열을 찾고 조회합니다
- python - 문자열 유형으로 입력 된 여러 줄 바이트 스트링을 적절한 문자열로 변환
- python - 소수 자리를 구분하는 공백이있는 숫자 문자열의 유형을 int/float로 변경합니다
- java - ScanneruseDelimiter ()에서 regex를 사용할 때 추가 공백
- javascript - 문자열에서 모음을 공백으로 대체 할 수없는 이유는 무엇입니까?
- python - 줄의 첫 번째에서 약간의 공백을 사용하여 각 줄에 문자열을 인쇄하는 방법은 무엇입니까?
- functional programming - 여러 줄 문자열에서 Haskell과 상호 작용하는 방법은 무엇입니까?
- javascript - 여러 줄 (/ m) 플래그로 JS의 문자열 끝 일치
- oracle - sql - 첫 번째 공백까지 문자열
- swift - 여러 줄 문자열이 null 일 수 있음, 숨기는 방법
- partitioning - 확장 파티션의 추가 공간은 사용되지 않습니다
- 여러 줄 문자열의 일부를 sed로 바꾸는 방법
- 텍스트 파일에서 문자열을 검색하고 PHP에서 공백이 발생한 후 인쇄
- awk - grep을 사용하여 파일에서 파이썬 여러 줄 식 문자열과 일치합니까?
- 파이썬에서 여러 줄 문자열의 줄 사이에 "\ n"제거
- flutter - SliverAppBar에서 추가 하단 공간을 제거하는 방법
- pandas - 파이썬에서 문자열을 소문자로 바꾸고 공백을 밑줄로 바꾸는 방법은 무엇입니까?
- python - 문자를 문자열의 공백으로 바꾸는 방법
- javascript - n 문자마다 여러 줄 문자열 분할
- bash : $PWD가 주어진 경로의 하위 디렉토리인지 확인하는 방법
- bash : 변수가 비어 있거나 공백만 포함되어 있는지 어떻게 테스트할 수 있습니까?
- linux : 문자열을 SSL 인증서 콘텐츠로 바꾸는 문제
- bash : .sh 셸을 .awk 셸로 마이그레이션
- bash에서 한 수준 깊은 디렉토리의 하위 디렉토리를 나열합니까?
- linux : 시간 제한은 오류로 실패하지만 시간 초과로 실패하지 않음
- python : bash 스크립트를 통해 crontab에 bash 스크립트 추가
- bash : CTRL+C를 사용하여 실행 중인 Docker 컨테이너를 종료하고 종료하는 방법은 무엇입니까?
- bash getopts는 옵션/플래그를 인수로 사용합니다.
- bash : 쉘 스크립트가 해당 라인이 처음에 메모리에 로드되었음을 나타낼 수 있습니까?
Heredoc은이 목적에 더 편리하게 들립니다.ex또는cat
과 같은 명령 인터프리터 프로그램에 여러 명령을 보내는 데 사용됩니다.<<
이후의 문자열 중지 할 위치를 나타냅니다.이 줄을 파일로 보내려면 다음을 사용하십시오 :
이 라인들을 변수에 저장할 수도 있습니다 :
이것은 pyzwyz라는 변수에 행을 저장합니다. .인쇄시 변수 주위의 따옴표를 기억하십시오. 그렇지 않으면 줄 바꿈 문자가 표시되지 않습니다.
더 나은 방법으로 들여 쓰기를 사용하여 코드에서 더 두드러지게 만들 수 있습니다. 이번에는 그냥
echo "$VAR"
를 추가-
후 탭이 표시되지 않도록합니다.하지만 코드에서 들여 쓰기를 위해 공백이 아닌 탭을 사용해야합니다.