這是因爲您的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