避免参数分割
考虑这个 justfile
:
foo argument:
touch {{argument}}
下面的命令将创建两个文件,some
和 argument.txt
:
$ just foo "some argument.txt"
用户 Shell 会把 "some argument.txt"
解析为一个参数,但当 just
把 touch {{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
的所有可能的值都有效,包括那些带双引号的。