我正在尝试将sh
命令设置为 Jenkins 管道的一部分。该命令有一个参数,其中提供了值列表。这些值中有空格。
我已经尝试了很多东西,数组,转义等等,但都没有成功。
这是一个例子:
# In Jenkins task I configure env variable:
VALUE_LIST=("Value One" "Value Two" "Value Three")
# In pipeline:
...
sh "command --param ${env.VALUE_LIST[@]}"
...
请理解,这只是我尝试实现这项工作的方法之一。
我需要结果命令如下:
command --param "Value One" "Value Two" "Value Three"
我能达到的最好成绩是
command --param Value One Value Two Value Three
这显然不起作用
答案1
这应该有效。
printf "%s\0" "${VALUE_LIST[@]}" | xargs -0 sh -c 'command --param "$@"' command_name
打印值xargs
并使用 null 作为分隔符。然后以值作为参数xargs
调用sh
并sh
执行命令。最后一部分command_name
,将通过您提供的名称来表示命令。在此构造中这是强制性的,否则 command 将不会收到 list 中的第一个值"$@"
。