避免参数分割

考虑这个 justfile:

foo argument:
  touch {{argument}}

下面的命令将创建两个文件,someargument.txt

$ just foo "some argument.txt"

用户 Shell 会把 "some argument.txt" 解析为一个参数,但当 justtouch {{argument}} 替换为touch some argument.txt 时,引号没有被保留,touch 会收到两个参数。

有几种方法可以避免这种情况:引号包裹、位置参数和导出参数。

引号包裹

可以在 {{argument}} 的周围加上引号,进行插值:

foo argument:
  touch '{{argument}}'

这保留了 just 在运行前捕捉变量名称拼写错误的能力,例如,如果你写成了 {{argument}},但如果 argument 的值包含单引号,则不会如你的预期那样工作。

位置参数

设置 positional-arguments 使所有参数作为位置参数传递,允许用 $1, $2, …, 和 $@ 访问这些参数,然后可以用双引号避免被 Shell 进一步分割:

set positional-arguments

foo argument:
  touch "$1"

这就破坏了 just 捕捉拼写错误的能力,例如你输入了 $2,这对 argument 的所有可能的值都有效,包括那些带双引号的值。

导出参数

当设置 export 时,所有参数都被导出:

set export

foo argument:
  touch "$argument"

或者可以通过在参数前加上 $ 来导出单个参数:

foo $argument:
  touch "$argument"

这就破坏了 just 捕捉拼写错误的能力,例如你输入 $argumant,但对 argument 的所有可能的值都有效,包括那些带双引号的。