Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
shell(ksh)脚本上的函数行为_Shell_Ksh_Aix - Fatal编程技术网

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继承)然后存在

编辑:我选中了,如果您阅读了最后一节的底部,您将看到这篇文章的解释