你如何在Cakev1中传递空参数?
根据升级文档./build.sh arg=
,从 v1.0 开始不再可能。确实,这会产生:
Error: Expected an option value.
但是它也不适用于arg=''
. 我可以不使用它并依赖默认值,但是从我的 Azure DevOps 管道中很难做到这一点,它读起来就像- script: ./build.sh --arg='$(arg1)'
arg1 是在别处定义的变量。
问题是arg1
我的 DevOps 管道中的变量是在外部定义的,可能为空,也可能不为空。
我能想到的最好的方法是至少传入一个空格./build.sh --arg='$(arg) '
(注意末尾的空格)并始终检查string.IsNullOrWhiteSpace
并始终进行修剪,但这似乎很hacky。
是否有更干净的解决方案来从命令行传递可能为空的变量?如果不是,我如何重写我的 Azure DevOps YML 以在参数为空时不传递参数?
回答
TL; 博士; 如果值可以为空/空,请使用
(空格)代替=
。
./build.sh --arg '$(arg1)'
./build.sh --arg '$(arg1)'
Cake v1.0 支持在--argumentName
和之间使用空格value
作为=
符号的替代。例如:
dotnet cake empty-args.cake --arg1 --arg2
dotnet cake empty-args.cake --arg1 valueA --arg2
dotnet cake empty-args.cake --arg1 --arg2 valueB
dotnet cake empty-args.cake --arg1 valueA --arg2 valueB
使用如下所示的示例 Cake 脚本,它将输出以下内容:
dotnet cake empty-args.cake --arg1 --arg2
arg1: [NULL]
arg2: [NULL]
dotnet cake empty-args.cake --arg1 --arg2
arg1: [NULL]
arg2: [NULL]
dotnet cake empty-args.cake --arg1 valueA --arg2
arg1: valueA
arg2: [NULL]
dotnet cake empty-args.cake --arg1 --arg2 valueB
arg1: [NULL]
arg2: valueB
dotnet cake empty-args.cake --arg1 valueA --arg2 valueB
arg1: valueA
arg2: valueB