2个要点,1 赋值时,如果是将执行命令的结果赋值给变量,没有(),只是将命令传递给变量,Shell在解释时会用命令替换变量。 2 ()打开子Shell,{}不会。因此()中的变量如果发生的变化,只对在()中有效。
参考以下代码。
#!/bin/bash
Line=(`wc -l ./etc/passwd`) #注意,如果没有()这个的话,实际上是将命令传递给变量,而不是命令执行后的值。
echo $Line
{
echo "test the {},the num of lines is $Line"
let Line=$(($Line+1))
echo "test the {},the num of lines is $Line"
}
echo "test the after {},the num of lines is $Line" # {}中,没有开子shell,Line的值被改变后,在脚本中被传递。
(
echo "test the (),the num of lines is $Line"
let Line=$(($Line+1))
echo "test the (),the num of lines is $Line"
echo "test the (),the num of lines is $Line"
)
echo "test the after (),the num of lines is $Line" # ()中,开子shell,Line的值被改变,离开()后,Line的值还是主Shell里改变之前的的值.