为什么var
在第一种情况下不改变而在第二种情况下改变?
#!/bin/bash
var=0
changeVar()
{
var=1
}
第一种情况:
tmp=$(changeVar)
echo "var = $var" // var = 0
第二种情况:
changeVar
echo "var = $var" // var = 1
为什么var
在第一种情况下不改变而在第二种情况下改变?
#!/bin/bash
var=0
changeVar()
{
var=1
}
第一种情况:
tmp=$(changeVar)
echo "var = $var" // var = 0
第二种情况:
changeVar
echo "var = $var" // var = 1
手册会告诉你:
命令替换、用括号分组的命令和异步命令在作为 shell 环境副本的子 shell 环境中调用。
在第一种情况下,$(...)
(即命令替换)导致函数在subshell中被调用。因此,变量值的变化是不可见的。