为什么值变量的功能没有改变?

Ale*_*ekz 1 bash

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

#!/bin/bash
var=0

changeVar()
{
  var=1
}
Run Code Online (Sandbox Code Playgroud)

第一种情况:

tmp=$(changeVar)
echo "var = $var"         // var = 0
Run Code Online (Sandbox Code Playgroud)

第二种情况:

changeVar
echo "var = $var"         // var = 1
Run Code Online (Sandbox Code Playgroud)

dev*_*ull 6

手册会告诉你:

命令替换,用括号分组的命令和异步命令在子shell环境中调用,该环境是shell环境的副本.

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