如何通过命令行参数存储在单个变量引号? [英] How to pass command line parameters with quotes stored in single variable?

查看:182
本文介绍了如何通过命令行参数存储在单个变量引号?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要打电话从shell脚本外部应用程序,但是这个shell脚本在一个变量获得的参数(从其他脚本)。一切都确定,直到我没有用单参数双引号,但是话用空格分隔。

下面是简化我的问题的例子(sh_param只是打印全部通过参数):

 #!/ bin / sh的通过(){
    回声与\\ $ @结果
    ./sh_param $ @
    回声与\\结果\\ $ @ \\
    ./sh_param$ @
    回声与\\ $ *结果
    ./sh_param $ *
    回声与\\结果\\ $ * \\
    ./sh_param$ *
}传'单参数单独的参数'

和结果(sh_param只是打印全部通过参数):

 以$ @结果
参数:单
参数:参数
参数:独立
参数:PARAMS
用$ @结果
参数:单参数独立PARAMS
用$结果*
参数:单
参数:参数
参数:独立
参数:PARAMS
以$ *的结果
参数:单参数独立PARAMS

和我想要的:

 参数:单参数
参数:独立
参数:PARAMS


解决方案

回答我的问题。非常感谢去pzanoni。
xargs的似乎正确解析任何你扔吧:-)
$ @,$的,$ @ $和的做工不错吧。所以,我的code现在看起来像:

 #!/ bin / sh的通过(){
    回声$ * | xargs的./sh_param
}传'单参数单独的参数'

和结果是什么,我想:

 参数:单参数
参数:独立
参数:PARAMS

I want to call external application from shell script, but this shell script gets parameters (from other script) in a single variable. All was OK until I did not have to use double quotes for single parameter, but words separated by space.

Here is simplified example of my problem (sh_param just prints all passed parameters):

#!/bin/sh

pass() {
    echo "Result with \$@"
    ./sh_param $@
    echo "Result with \"\$@\""
    ./sh_param "$@"
    echo "Result with \$*"
    ./sh_param $*
    echo "Result with \"\$*\""
    ./sh_param "$*"
}

pass '"single param" separate params'

and results (sh_param just prints all passed parameters):

Result with $@
Param: "single
Param: param"
Param: separate
Param: params
Result with "$@"
Param: "single param" separate params
Result with $*
Param: "single
Param: param"
Param: separate
Param: params
Result with "$*"
Param: "single param" separate params

And I want:

Param: single param
Param: separate
Param: params

解决方案

Answering my own question. BIG thanks goes to pzanoni. xargs seems to parse correctly anything you are throwing to it :-) "$@", "$", $@ and $ works good with it. So my code now looks like:

#!/bin/sh

pass() {
    echo $* | xargs ./sh_param
}

pass '"single param" separate params'

And result is what I wanted:

Param: single param
Param: separate
Param: params

这篇关于如何通过命令行参数存储在单个变量引号?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆