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是什么,这都会有效. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |