1

为什么var在第一种情况下不改变而在第二种情况下改变?

#!/bin/bash
var=0

changeVar()
{
  var=1
}

第一种情况:

tmp=$(changeVar)
echo "var = $var"         // var = 0

第二种情况:

changeVar
echo "var = $var"         // var = 1
4

1 回答 1

6

手册会告诉你:

命令替换、用括号分组的命令和异步命令在作为 shell 环境副本的子 shell 环境中调用。

在第一种情况下,$(...)(即命令替换)导致函数在subshel​​l中被调用。因此,变量值的变化是不可见的。

于 2013-09-21T08:44:41.907 回答