一、对于shell脚本,内部函数的优先级别大于外部命令,但小于内部命令(shell builtin)
如脚本如下:
cd()
{
date +'111'
}
cat()
{
date +'222'
}
cd
cat
运行结果:
222
二、对于shell脚本中的子函数,所定义的变量都是全局变量,并且全局作用。
如:
b()
{
echo "b.in=[$var]"
var=456
}
a()
{
echo "a.in=[$var]"
var=123
}
var=100
a
echo "a.out=[$var]"
b
echo "b.out=[$var]"
运行结果:
a.in=[100]
a.out=[123]
b.in=[123]
b.out=[456]
三、对于sh执行或直接调用的子shell(启动子进程调用),只有在主shell中export的变量才能由子shell使用,
但是修改后的值无法返回主shell
如:
a.sh的脚本内容为:
echo "a.in=[$var]"
var=123
test.sh的内容为:
var=100
sh a.sh
echo "a.out=[$var]"
export var
sh a.sh
echo "a.out=[$var]"
运行结果:
a.in=[]
a.out=[100]
a.in=[100]
a.out=[100]
四、 对于通过.执行的子shell(直接在当前进程中调用,不启动子进程),可以直接使用主shell变量,无需export,并且
修改后的值可以直接在主shell中生效
a.sh的脚本内容为:
echo "a.in=[$var]"
var=123
test.sh的内容为:
var=100
. ./a.sh
echo "a.out=[$var]"
export var
. ./a.sh
echo "a.out=[$var]"
运行结果:
a.in=[100]
a.out=[123]
a.in=[123]
a.out=[123]
五、 对于exec调用的子shell(停止当前进程,重新启动一个新进程),只有在主shell中export的变量才能使用,但
调用后无法再回到主shell
a.sh脚本内容:
echo "a.in=[$var]"
var=123
test.sh的内容为:
var=100
exec ./a.sh
echo "a.out=[$var]"
运行结果:
a.in=[]
六、 对于eval进行调用的情况,主要根据执行的命令串的内容来确定。
test.sh的内容如下:
var=100
eval "./a.sh"
echo "a.out=[$var]"
eval ". ./a.sh"
echo "a.out=[$var]"
shell脚本返回执行结果运行结果:
a.in=[]
a.out=[100]
a.in=[100]
a.out=[123]
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论