以下是两个不同版本的程序:
:此
程序:
#!/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语句获取函数的输出并打印它。 那么为什么两者的输出都不同?
答案 0 :(得分:2)
当你使用反引号(或$(...))时,你可以在子shell中执行它。
也就是说,启动了一个新的shell(继承自当前的shell)然后存在。
修改:我检查了your link,如果您阅读了最后一部分的底部,您会看到此解释。