2014-04-25 41 views
0

我试图运行RTC 4.x命令将组件添加到工作区。组件列表在名称中有空格,因此它们需要用引号括起来。我存储这个列表中一个简单的字符串变量:使用双引号的Shell字符串 - RTC命令

COMPONENTS="\"TestComp\" \"Common Component\""

当我刚刚回声出正确显示的组件,但是当我在SCM命令用很奇怪的事情发生在了引号。我在詹金斯运行这个,所以我可以得到一些额外的输出,但同样的事情发生时,我在命令行上运行它,所以这不是詹金斯问题。

从控制台日志:

+ COMPONENTS='"TestComp" "Common Component"' 
+ echo '"TestComp"' '"Common' 'Component"' 
"TestComp" "Common Component" 

该命令试图运行以下命令:

+ scm workspace add-components TEST_Workspace -s Test_Stream '"TestComp"' '"Common' 'Component"'

主要生产:

Problem running 'workspace add-components': 
Unmatched component ""Common". 

回答

2

通常情况下,你需要使用用于存储本身可能包含空白的项目的数组:

components=("TestComp" "Common Component") 
scm workspace add-components TEST_Workspace -s Test_Stream "${components[@]}" 

引用数组膨胀与@索引产生字的序列,每个所述阵列的元件中的一个,而不是一个单一的字。

+0

好想,但我也尝试过数组路线。这取决于我如何玩报价产生类似的结果。例如:'components =(“TestComp”“Common Component”)'产生'com.ibm.team.scm.common.ComponentNotInWorkspaceException:组件'TestComp'不在工作区错误中。这个'components =('TestComp'''Common Component'')'产生'不匹配的组件''Common Component''。' – JamesE

+1

如果你手动指定组件而不尝试存储它们,你将如何调用'scm'一个变量?你显示的第一个错误(对于我声称应该工作的代码)看起来更像是一个设置问题,而不是'bash'命令。 – chepner

+0

@JimG你是否在数组引用周围使用了双引号(如''{components [@]}“')? –

相关问题