加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 在“$@”扩展中转义逗号

发布时间:2020-12-16 01:56:36 所属栏目:安全 来源:网络整理
导读:“$@”似乎会消失.例如 param="123 1,2"set echo $param"$@" 这将回显“123 1 2”而不是“123 1,2”,但在某些情况下,需要作为命令的值. 这似乎与bash版本有关,使用bash 4.1.2,结果是正确的,但是在4.2.46中,缺少逗号. 编辑: 简而言之,也许值得责备: 我没有
“$@”似乎会消失.例如

param="123 1,2"
set echo $param
"$@"

这将回显“123 1 2”而不是“123 1,2”,但在某些情况下,需要作为命令的值.

这似乎与bash版本有关,使用bash 4.1.2,结果是正确的,但是在4.2.46中,缺少逗号.

编辑:

简而言之,也许值得责备:

我没有设置IFS,在终端中我给出的测试用例正确,但不是我的脚本.

我实际上是在编写一个init脚本,我检查了/etc/init.d/functions中的action()函数,并添加了一些调试代码:

echo "$@" # added by me
unset IFS # added by me
"$@" && success $"$STRING" || failure $"$STRING"

回显的命令是正确的(很好-n -10 ovs-vswitchd … –socket-mem 1024,1024),但在ps结果中,nice执行的实际命令变为ovs-vswitchd … –socket-mem 1024 1024.

我开始认为也许责怪是好事.

解决方法

请在拆分param之前(在命令集之前)直接在脚本中设置IFS.例如,做这样的事情:

oldIFS=$IFS
param="123 1,2"
IFS=" "  # put tabs and or newline if also wanted.
set echo $param
IFS=$oldIFS
"$@"

无论你之前的IFS是什么,这都会有效.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读