shell中for循环中的变量为何在done后面echo输出不正确

2024-11-16 04:16:12
推荐回答(2个)
回答1:

定义为环境变量没有用的,环境变量只是在子进程创建的时候可以从父进程复制到子进程,它无法实现从子进程往父进程传递,也不能在子进程运行期间从父进程获得新值。

 

解决的办法就是不要产生子进程,改成:

while read line

do

        i=`echo "$line" |awk '{print $3}'`

        j=$[j+i]

        echo $j

done < test

回答2:

这是因为管道的右边是在subshell中执行的,“j=0”这个语句定义的变量j和while里面的j不是同一个变量
可以将j设定为环境变量,即这样定义:
export j=0
这样两地方的j就是使用的同一个变量了