如何通过命令行参数存储在单个变量引号? [英] How to pass command line parameters with quotes stored in single variable?
问题描述
我要打电话从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屋!