shell从外部读入参数调用另一个shell脚本的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell从外部读入参数调用另一个shell脚本的问题相关的知识,希望对你有一定的参考价值。
例子:
args=$(get_args)
sh other.sh $args
get_args函数从外部读取要传给other.sh的参数echo出来,传递给args。
这个时候问题来了,假设读入的args是带引号的,比如说“foo bar”,调用other.sh的时候,args作为一个字符串变量来处理,里面的引号失效了,实际传到other.sh的是两个参数而不是我期望的一个参数。
求高手!
sh other.sh "$args"
任何字符串变量,在使用的时候最好都加上双引号。追问
我的意思是args是从外部(比如一个文件)读入的,对我的脚本是未知的,可以在任何地方出现引号,比如foo “bar bar” foo
追答$ cat file.txtfoo "bar bar" foo
$ args=`cat file.txt`
$ echo $args
foo "bar bar" foo
引号应该不会失效。估计是get_args函数的使用方法有问题,建议把get_args函数放上来看看。
shell中的函数一般不推荐通过return的方法返回值,因为shell变量默认是全局的,只要在函数中直接给变量赋值就可以了。执行函数后,变量自动得到值。如下:
get_argssh other.sh $args追问
echo出来的确是带引号的,但是这里的引号其实已经只是单纯的字符串,没有引住参数的作用了,附图一张:
你用 sh -x foo.sh 执行看看调试输出就知道问题所在了。
前面有加号的表示中间结果。
+ sh test.sh foo '"foo' 'bar"' bar
可以看到,中间两个参数被自动分开来并加上了单引号。
修改foo.sh可以解决:
arg=`cat ./arg`eval sh other.sh $arg 参考技术A 可以考虑用\转义,\"foo bar\"
Lua脚本怎么样调用外部脚本
参考技术A 若要调用外部Lua脚本,需要使用dofile。这很像C语言中的
#include“”
用法:dofile
("路径")
==================
--File:E:\lua1.lua
dofile
("Hello.lua")
print(a)
==================
--File:
E:\Hello.lua
a
=
100
==================
==输出==
100
以上是关于shell从外部读入参数调用另一个shell脚本的问题的主要内容,如果未能解决你的问题,请参考以下文章
我可以从另一个 shell 脚本调用一个 shell 脚本的函数吗?