Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >BASH:在已定义变量中的变量?

BASH:在已定义变量中的变量?
EN

Stack Overflow用户
提问于 2013-12-19 18:14:59
回答 3查看 52关注 0票数 0

我在bash脚本中有以下函数,但不起作用?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
do_get() {
        cmd='<command version="33" cmd="GETINFO" $3</command>'
        echo $cmd
}

现在,如果我在cmd变量之前回显$3,它将回显1234,我在执行此操作时将其作为3参数传递。但当我做一个echo $cmd时,它只显示3美元。

我在下面尝试了几个类似的东西,以为它被删除了'$3‘,但是它显示空白’‘$3’‘,和上面的一样

EN

回答 3

Stack Overflow用户

发布于 2013-12-19 18:20:22

当变量包含在单引号中时,它不会展开。您需要使用双引号,但由于内部有双引号,因此需要确保也要转义这些双引号。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
do_get() {
        cmd="<command version=\"33\" cmd=\"GETINFO\" $3</command>"
        echo $cmd
}
票数 2
EN

Stack Overflow用户

发布于 2013-12-19 18:30:57

较新版本的bashprintf命令添加了一个-v标志,这使得这样的赋值看起来更容易一些,因为引用减少了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
printf -v cmd '<command version="33" cmd="GETINFO" %d </command' "$3"
票数 1
EN

Stack Overflow用户

发布于 2013-12-19 18:28:37

Bash中的单引号可以防止变量替换。为了替换第三个参数,应该用双引号将字符串括起来。当然,字符串中存在双引号的问题,因此需要使用反斜杠对其进行转义:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cmd="<command version=\"33\" cmd=\"GETINFO\" $3 </command>"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20688810

复制
相关文章

相似问题

添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文