首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Shell变量扩展:存储在一个变量中包含空格的多个命令参数

Shell变量扩展:存储在一个变量中包含空格的多个命令参数
EN

Stack Overflow用户
提问于 2021-07-05 14:11:55
回答 1查看 57关注 0票数 0

我正在编写一个shell脚本来驱动xcodebuild,即Xcode命令行前端。

xcodebuild通过以下方式在命令行上获取构建设置:

$ xcodebuild a=value b=value

value可以包含空格,例如,它可以是路径列表。

所以我会这样调用它:

$ xcodebuild "a=value1 value2 value3" "b=value4 value5"

xcodebuild将按照预期报告设置:

代码语言:javascript
运行
复制
Build settings from command line:
    a = value1 value2 value3
    b = value4 value5

但是,当按如下方式调用时:

$ xcodebuild "a=value1 b=value2"

这将被解释为单个参数,将一个值分配给build设置a:

代码语言:javascript
运行
复制
Build settings from command line:
    a = value1 b=value2

现在,真正的问题是我想要写一个shell脚本,在一个变量中包含所有的构建设置,例如,我可以这样做:

代码语言:javascript
运行
复制
SETTING_A="a=value1 value2 value3"
SETTING_B="b=value4 value5"

xcodebuild "${SETTING_A}" "${SETTING_B}"

然而,这并不具有可扩展性。

我想做这样的事情:

代码语言:javascript
运行
复制
SETTING_A="a=value1 value2 value3"
SETTING_B="b=value4 value5"
SETTINGS=${SETTING_A} ${SETTING_B}

xcodebuild ${SETTINGS}

然而,上面的方法不起作用,而且无论我尝试了什么变体,我都不能将SETTING_A和SETTING_B作为命令的两个单独的单词/参数。如果我使用"$SETTINGS",它就是1;如果我只使用$SETTINGS,它就是5。

我正在寻找标准的unix shell解决方案,但如果在标准sh中做不到,我会考虑Bash或Zsh特定的解决方案。

EN

回答 1

Stack Overflow用户

发布于 2021-07-05 14:22:30

使用标准sh (POSIX),只需在单个设置扩展上使用set并调用"$@"来传递它们,即

代码语言:javascript
运行
复制
SETTING_A="a=value1 value2 value3"
SETTING_B="b=value4 value5"

set -- "${SETTING_A}" "${SETTING_B}"
xcodebuild "$@"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68251421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档