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的是两个参数而不是我期望的一个参数。
求高手!

调用的时候给$args加双引号就行了
sh other.sh "$args"

任何字符串变量,在使用的时候最好都加上双引号。追问

我的意思是args是从外部(比如一个文件)读入的,对我的脚本是未知的,可以在任何地方出现引号,比如foo “bar bar” foo

追答$ cat file.txt 
foo "bar bar" foo
$ args=`cat file.txt`
$ echo $args
foo "bar bar" foo

引号应该不会失效。估计是get_args函数的使用方法有问题,建议把get_args函数放上来看看。

shell中的函数一般不推荐通过return的方法返回值,因为shell变量默认是全局的,只要在函数中直接给变量赋值就可以了。执行函数后,变量自动得到值。如下:

get_args
sh 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 脚本的函数吗?

Java调用JS脚本里的方法

参数传递:shell脚本调用一个带参数的python函数

Lua脚本怎么样调用外部脚本

PowerShell ISE:调试从 power-shell 脚本调用的另一个 power-shell 脚本

将文件中的键/值参数读入 shell 脚本