따라해보려고 해요이것여러 줄의 텍스트를 바꿉니다.
하지만 이렇게 하려면 아래와 같은 텍스트를 변수에 넣고 싶습니다.
``dataview
테이블에 ID가 없습니다. 페이지 번호는 no이고, 링크(파일 이름, 주제)는 이름입니다.
WHERE back-to = this.file.link
SORT file.name asc
SORT page-no asc
```
다음 명령을 시도했습니다.
original="```dataview\nTABLE WITHOUT ID page-no as no, link(file.name, topic) as name\nWHERE back-to = this.file.link\nSORT file.name asc\nSORT page-no asc\n```"
하지만 다음 오류가 발생합니다.
bash: command substitution: line 1: syntax error near unexpected token `(' bash: command substitution: line 1: `dataview\nTABLE WITHOUT ID page-no as no, link(file.name, topic) as name\nWHERE back-to = this.file.link\nSORT file.name asc\nSORT page-no asc\n'
어떻게 하는 게 옳은 걸까요...
답변1
man bash
(강조 내) 에서 :
문자를 큰따옴표로 묶으면 따옴표 안에 있는 모든 문자의 리터럴 값이 유지됩니다.와는 별개로$, `, 및 히스토리 확장이 활성화된 경우 !.
백틱은 문자 그대로 유지되지 않으므로 쉘은 이를 명령 대체로 구문 분석합니다. 여기에는 모든 문자를 문자 그대로 유지하는 작은따옴표가 필요합니다.
OTOH, 백슬래시 \n
는 다음과 같이 이스케이프됩니다.아니요작은따옴표 또는 큰따옴표로 묶인 문자열의 특수 처리 - 개행 문자를 원할 경우 문자 그대로 포함할 수 있습니다. 그래서:
original='```dataview
TABLE WITHOUT ID page-no as no, link(file.name, topic) as name
WHERE back-to = this.file.link
SORT file.name asc
SORT page-no asc
```'
$ echo "$original"
```dataview
TABLE WITHOUT ID page-no as no, link(file.name, topic) as name
WHERE back-to = this.file.link
SORT file.name asc
SORT page-no asc
```
정말로 사용하고 싶다면 \n
bash에서 사용할 수 있습니다ANSI C 견적,
original=$'```dataview\nTABLE WITHOUT ID page-no as no, link(file.name, topic) as name\nWHERE back-to = this.file.link\nSORT file.name asc\nSORT page-no asc\n```'
또는 셸의 내장 printf
함수를 사용하세요.
printf -v original '```dataview\nTABLE WITHOUT ID page-no as no, link(file.name, topic) as name\nWHERE back-to = this.file.link\nSORT file.name asc\nSORT page-no asc\n```'
그러나 IMHO 이것들은 읽기가 더 어렵습니다.