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

将shell转义的参数字符串传递给Bourne shell中的子命令

发布时间:2020-12-15 22:27:33 所属栏目:安全 来源:网络整理
导读:假设我有一个我想要运行的命令(cmd)和一个包含我想要传递给函数的参数的变量(类似于-foo’bar baz’qux).像这样: #!/bin/shcommand=cmdargs="--foo 'bar baz' qux" 参数包含引号,如上所示,它们将包含空格的参数组合在一起.然后我想运行命令: $command $arg
假设我有一个我想要运行的命令(cmd)和一个包含我想要传递给函数的参数的变量(类似于-foo’bar baz’qux).像这样:

#!/bin/sh
command=cmd
args="--foo 'bar baz' qux"

参数包含引号,如上所示,它们将包含空格的参数组合在一起.然后我想运行命令:

$command $args

当然,这会导致运行带有四个参数的命令: – foo,’bar,baz’和qux.我习惯的替代方案(即使用“$@”时)提出了另一个问题:

$command "$args"

这将使用一个参数执行命令: – foo’bar baz’qux.

如何按预期运行带有三个参数( – foo,bar baz和qux)的命令?

解决方法

一种可能性是使用eval:

#!/bin/sh

args="--foo 'bar baz' qux"
cmd="python -c 'import sys; print sys.argv'"

eval $cmd $args

这样就可以解释命令行而不是根据IFS进行拆分.这给出了输出:

$./args.sh 
['-c','--foo','bar baz','qux']

这样你就可以看到args按你想要的那样传递.

(编辑:李大同)

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

    推荐文章
      热点阅读