変数の定義中にエラーが発生しました。

変数の定義中にエラーが発生しました。

フォローしようとしています。これ複数行のテキストを置き換えます。

しかし、これを行うには、以下のテキストを変数に入れたいと思います。

`` 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 これらは読みにくいです。

おすすめ記事