다음과 같이 미리 정의 된 텍스트를 파일에 쓰고 싶습니다 :
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 문자마다 여러 줄 문자열 분할
- shell - 시간 문자열 이름을 기반으로하는 bash 정렬 배열
- linux - bash에서 jq로 배열의 키 전달 — 모든 null 출력
- shell - Bash의 변수를 기반으로 특정 TSV 테이블 행에서 값 추출
- bash - 파일의 모든 명령을 대화식으로 실행하는 방법
- shell - 변수에 대한 배시 계산
- shell - Bash에서 두 파일 열 및 행 병합
- bash - zsh에서 파일의 모든 명령을 대화식으로 실행하는 방법은 무엇입니까?
- 쉘 스크립트보다 오래 사는 Bash 변수
- linux - 쉘이 예상대로 sed 교체 내에서 grep 명령을 실행합니다
- bash - 사용자 정의 숫자의 배수가 사용자 정의 범위 내에 있는지 확인하는 루프
Heredoc은이 목적에 더 편리하게 들립니다.ex또는cat
과 같은 명령 인터프리터 프로그램에 여러 명령을 보내는 데 사용됩니다.<<
이후의 문자열 중지 할 위치를 나타냅니다.이 줄을 파일로 보내려면 다음을 사용하십시오 :
이 라인들을 변수에 저장할 수도 있습니다 :
이것은 pyzwyz라는 변수에 행을 저장합니다. .인쇄시 변수 주위의 따옴표를 기억하십시오. 그렇지 않으면 줄 바꿈 문자가 표시되지 않습니다.
더 나은 방법으로 들여 쓰기를 사용하여 코드에서 더 두드러지게 만들 수 있습니다. 이번에는 그냥
echo "$VAR"
를 추가-
후 탭이 표시되지 않도록합니다.하지만 코드에서 들여 쓰기를 위해 공백이 아닌 탭을 사용해야합니다.