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