如何在Justfile中利用已有变量拼接赋值新变量?
解决Justfile变量拼接未展开问题
你尝试在Justfile中拼接两个已有变量为新变量,但三种方式均未成功展开变量,原代码及执行输出如下:
原代码
var_a := "hello" var_b := "world" var_v1 := "{{var_a}}-{{var_b}}" var_v2 := `export exp_a={{var_a}}; echo "${exp_a}-{{var_b}}"` var_v3 := "{{ var_a }}" + "{{ var_b }}" @default: echo var_a: {{var_a}} echo var_b: {{var_b}} echo var_v1: {{var_v1}} echo var_v2: {{ var_v2 }} echo var_v3: {{ var_v3 }}
原执行输出
# output of `just default` var_a: hello var_b: world var_v1: {{var_a}}-{{var_b}} var_v2: {{var_a}}-{{var_b}} var_v3: {{ var_a }}{{ var_b }}
问题原因
在Justfile的变量赋值语句中,引用已有变量不需要用{{}}包裹——{{}}仅用于在recipe的shell命令中展开变量。你之前的写法错误地在变量赋值时使用了{{}},导致Just将其视为普通字符串,而非变量引用。
正确解决方案
以下是三种可行的变量拼接方式:
方式1:直接使用变量名拼接(推荐)
Just支持直接在变量赋值时将变量、字符串字面量组合,用空格分隔即可完成拼接:
var_v1 := var_a "-" var_b
方式2:使用+运算符拼接
Just提供+运算符用于字符串拼接,适合更清晰表达拼接逻辑:
var_v2 := var_a + "-" + var_b
方式3:通过shell命令拼接
如果需要借助shell逻辑拼接,确保在shell命令中正确展开Just变量(此时需要{{}}):
var_v3 := `echo "{{var_a}}-{{var_b}}"`
修改后的完整代码
var_a := "hello" var_b := "world" # 方式1:直接组合 var_v1 := var_a "-" var_b # 方式2:+运算符 var_v2 := var_a + "-" + var_b # 方式3:shell命令拼接 var_v3 := `echo "{{var_a}}-{{var_b}}"` @default: echo var_a: {{var_a}} echo var_b: {{var_b}} echo var_v1: {{var_v1}} echo var_v2: {{var_v2}} echo var_v3: {{var_v3}}
执行结果
运行just default后会得到预期输出:
var_a: hello var_b: world var_v1: hello-world var_v2: hello-world var_v3: hello-world
内容的提问来源于stack exchange,提问作者Dexter
相关产品推荐
相关产品推荐

