这是因为您的pipe-into-while运行在子shell中,并且不能以任何方式影响父级。这就是为什么父母无法看到$VAR
的价值。解决方法是使用进程替换摆脱管道:
VAR=0;
while read -r LINE; do
VAR=`expr $LINE + $VAR`;
echo "=> "$VAR;
done < <(awk /^Shared/'{print $2}' /proc/$1/smaps)
echo "Shared TOTAL = "$VAR
或,你的输出存储在一个临时变量:
TMPVAR=$(awk /^Shared/'{print $2}' /proc/$1/smaps)
VAR=0;
while read -r LINE; do
VAR=`expr $LINE + $VAR`;
echo "=> "$VAR;
done <<< "$TMPVAR"
echo "Shared TOTAL = "$VAR
或,使用临时文件:
awk /^Shared/'{print $2}' /proc/$1/smaps > tmp
VAR=0;
while read -r LINE; do
VAR=`expr $LINE + $VAR`;
echo "=> "$VAR;
done < tmp
rm tmp
echo "Shared TOTAL = "$VAR