변수를 정의하는 중 오류가 발생했습니다.

변수를 정의하는 중 오류가 발생했습니다.

따라해보려고 해요이것여러 줄의 텍스트를 바꿉니다.

하지만 이렇게 하려면 아래와 같은 텍스트를 변수에 넣고 싶습니다.

``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
  ```

정말로 사용하고 싶다면 \nbash에서 사용할 수 있습니다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 이것들은 읽기가 더 어렵습니다.

관련 정보