shell(ksh)脚本上的函数行为

时间:2011-11-29 09:47:26

标签: shell ksh aix

以下是两个不同版本的程序:

:此

程序:

#!/usr/bin/ksh

printmsg() {
        i=1
        print "hello function :)";
}
i=0;
echo I printed `printmsg`;
printmsg
echo $i

输出:

# ksh e
I printed hello function :)
hello function :)
1

程序:

#!/usr/bin/ksh

printmsg() {
        i=1
        print "hello function :)";
}
i=0;
echo I printed `printmsg`;
echo $i

输出:

# ksh e
I printed hello function :)
0

上述两个程序之间的唯一区别是printmsg在上述程序中是2次,而printmsg在下面的程序中被调用一次。

我的怀疑出现here: To quote

  

警告:函数几乎就像外部脚本一样......除外   默认情况下,所有变量在相同的ksh之间是SHARED   处理!如果你更改函数内的变量名....那   离开后,变量的值仍然会改变   功能!!

但我们可以明确在第二个程序的输出中看到i的值保持不变。但我们确信函数被调用,因为print语句获取函数的输出并打印它。 那么为什么两者的输出都不同?

1 个答案:

答案 0 :(得分:2)

当你使用反引号(或$(...))时,你可以在子shell中执行它。

也就是说,启动了一个新的shell(继承自当前的shell)然后存在。

修改:我检查了your link,如果您阅读了最后一部分的底部,您会看到此解释。