【问题标题】:Shell string with double quotes - RTC command带双引号的 Shell 字符串 - RTC 命令
【发布时间】:2014-04-25 19:08:38
【问题描述】:

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

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

当我只是回显 COMPONENTS 时,它会正确显示,但是当我在 scm 命令中使用它时,引号会发生奇怪的事情。我在 Jenkins 中运行它,所以我可以获得一些额外的输出,但是当我在命令行上运行它时会发生同样的事情,所以这不是 Jenkins 问题。

来自控制台日志:

+ 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".

【问题讨论】:

    标签: bash shell rtc


    【解决方案1】:

    通常,您需要使用数组来存储本身可能包含空格的项目:

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

    引用以@ 为索引的数组扩展会生成一个单词序列,数组的每个元素一个单词,而不是一个单词。

    【讨论】:

    • 好主意,但我也尝试过数组路由。根据我如何使用引号,这会产生类似的结果。例如:components=("TestComp" "Common Component") 导致 com.ibm.team.scm.common.ComponentNotInWorkspaceException: Component 'TestComp' is not in workspace 错误。这个components=("TestComp" "'Common Component'") 产生Unmatched component "'Common Component'".
    • 如果您手动指定组件而不尝试将它们存储在变量中,您将如何调用scm?您显示的第一个错误(对于我声称应该工作的代码)看起来更像是设置问题,而不是 bash 命令。
    • @JimG 你是否在数组引用周围使用了双引号(如"${components[@]}")?
    • @GordonDavisson 是的,我在数组引用周围加了双引号。 @chepner 如果我手动调用命令,它将是:scm workspace add-components TEST_Workspace -s Test_Stream TestComp "Common Component" 或者它也可能是 scm workspace add-components TEST_Workspace -s Test_Stream "TestComp" "Common Component"
    • 这行得通吗?我的代码和那个应该没有区别。
    猜你喜欢
    • 2012-06-27
    • 1970-01-01
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-26
    相关资源
    最近更新 更多