如何为 org-mode 代码块 header 设置全局 :var 绑定?

How can I have global :var binding for org-mode code block header?

使用 emacs/org-mode,我可以为每个代码块定义变量绑定,如下所示。

#+HEADER: :var release="release-0.5"
#+begin_src shell :results output verbatim
echo $release
#+end_src

#+RESULTS:
: release-0.5

#+HEADER: :var release="release-0.5"
#+begin_src shell
echo "Indeed the release is $release"
#+end_src

#+RESULTS:
: Indeed the release is release-0.5

但是,我想知道是否有办法避免重复,全局或按部分定义变量绑定?

我尝试了以下方法,它不起作用:

* Release Package the script to be portable
:PROPERTIES:
:header-args:var: release="release-0.5"
:END
#+begin_src shell :results output verbatim
echo $release
#+end_src

#+RESULTS:
: 
#+begin_src shell
echo "Indeed the release is $release"
#+end_src

#+RESULTS:
: Indeed the release is

编辑:(采纳@Enze Chi 的建议) 以下仍然无效:

:PROPERTIES:
:header-args:shell:var release="release-0.5"
:END
#+begin_src shell :results output verbatim
echo $release
#+end_src

#+RESULTS:
:

#+begin_src shell
echo "Indeed the release is $release"
#+end_src

#+RESULTS:
: Indeed the release is

不知道有没有办法让它起作用?

应该是headers-arg之后的语言 :header-args:shell: :var release="release-0.5"

属性的名字是header-args:shell; 属性 的值为 :var release="release-0.5"。属性抽屉的语法是:

:PROPERTIES:
:NAME: VALUE
:END:

所以在这种情况下:

:PROPERTIES:
:header-args:shell: :var release="release-0.5"
:END:

注意 属性 的名称必须用冒号括起来 (:) 并且在结束冒号之后必须有一个 space 以将名称部分与值部分,因为这就是 属性 名称在句法上的识别方式。

因此 属性 (header-args:shell) 名称前后的冒号是 属性 语法的一部分, header-args:shell 中的冒号是 header-args:shell 语法的一部分名称本身,:var release="release-0.5" 中的冒号是值本身的一部分;而您需要在“殖民化”名称和值之间添加一个space。你必须保持冒号笔直!

有关所有详细信息,请参阅 Org 模式手册中的 Property Syntax and Using header arguments