shell(ksh)脚本上的函数行为
以下是程序的两个不同版本: 这个 节目:shell(ksh)脚本上的函数行为,shell,ksh,aix,Shell,Ksh,Aix,以下是程序的两个不同版本: 这个 节目: #!/usr/bin/ksh printmsg() { i=1 print "hello function :)"; } i=0; echo I printed `printmsg`; printmsg echo $i #!/usr/bin/ksh printmsg() { i=1 print "hello function :)"; } i=0; echo I printed `pr
#!/usr/bin/ksh
printmsg() {
i=1
print "hello function :)";
}
i=0;
echo I printed `printmsg`;
printmsg
echo $i
#!/usr/bin/ksh
printmsg() {
i=1
print "hello function :)";
}
i=0;
echo I printed `printmsg`;
echo $i
输出:
# ksh e
I printed hello function :)
hello function :)
1
# ksh e
I printed hello function :)
0
和
节目:
#!/usr/bin/ksh
printmsg() {
i=1
print "hello function :)";
}
i=0;
echo I printed `printmsg`;
printmsg
echo $i
#!/usr/bin/ksh
printmsg() {
i=1
print "hello function :)";
}
i=0;
echo I printed `printmsg`;
echo $i
输出:
# ksh e
I printed hello function :)
hello function :)
1
# ksh e
I printed hello function :)
0
上述两个程序之间的唯一区别是,printmsg
在上述程序中调用了2次,而printmsg
在以下程序中调用了一次
我产生了怀疑
请注意:函数的行为几乎与外部脚本一样。。。除了
默认情况下,所有变量在同一ksh之间共享
过程如果在函数中更改变量名。。。。那个
离开后,变量的值仍将更改
功能
但是我们可以在第二个程序的输出中清楚地看到,i
的值保持不变。但是我们可以确定,当print语句获取函数的输出并打印它时,函数会被调用那么为什么两者的输出都不同呢?当您使用backticks(或$(…)时,您在子shell中执行它
也就是说,一个新的shell被启动(从当前shell继承)然后存在
编辑:我选中了,如果您阅读了最后一节的底部,您将看到这篇文章的解释