【问题标题】:Function behaviour on shell(ksh) scriptshell(ksh)脚本上的函数行为
【发布时间】:2012-01-08 16:04:41
【问题描述】:

这是一个程序的 2 个不同版本:

这个

程序:

#!/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 之间共享 过程!如果您在函数内更改变量名.... 变量的值在你离开后仍然会改变 函数!!

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

【问题讨论】:

    标签: shell ksh aix


    【解决方案1】:

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

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

    编辑:我检查了your link,如果你阅读它的底部,最后一部分,你会看到这个解释。

    【讨论】:

      猜你喜欢
      • 2014-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多