shell 变量赋值

木有文化 发布于 2013/02/22 14:18
阅读 750
收藏 0

有个奇怪的问题,前几天运行好好的shell,今天出现奇怪的问题,

TOEMAIL='galen@f1lab.mobi --to root@f1lab.mobi'
cat $TOMAILFILE | while read TOUSER; do
    if [ -n "$TOUSER" ]; then
        TOEMAIL=$TOEMAIL' --to '$TOUSER
    fi
done
echo 'to email'$TOEMAIL
这段shell昨天运行好好的,今天不知道怎么回事,TOEMAIL最后没有被修改,
这是-x 结果,
+ TOMAILFILE=/home/data.web/file/files/emartapp/emart/ios/to.txt
+ '[' '!' -f /home/data.web/file/files/emartapp/emart/ios/to.txt ']'
+ TOEMAIL='galen@f1lab.mobi --to root@f1lab.mobi'
+ read TOUSER
+ cat /home/data.web/file/files/emartapp/emart/ios/to.txt
+ '[' -n harry@ccfocusone.com ']'
+ TOEMAIL='galen@f1lab.mobi --to root@f1lab.mobi --to harry@ccfocusone.com'
+ read TOUSER
+ '[' -n harry@f1lab.mobi ']'
+ TOEMAIL='galen@f1lab.mobi --to root@f1lab.mobi --to harry@ccfocusone.com --to harry@f1lab.mobi'
+ read TOUSER
+ echo 'to emailgalen@f1lab.mobi' --to root@f1lab.mobi
to emailgalen@f1lab.mobi --to root@f1lab.mobi

很明显,toemail在中间已经被修改了,但后面echo 的时候为什么又回去了?

求高人指点

加载中
0
ChenQi
ChenQi
cat $TOMAILFILE | while read TOUSER; do
    if [ -n "$TOUSER" ]; then
        TOEMAIL=$TOEMAIL' --to '$TOUSER
    fi

done

改成

while read TOUSER; do
    if [ -n "$TOUSER" ]; then
        TOEMAIL=$TOEMAIL' --to '$TOUSER
    fi
done < $TOMAILFILE

问题根源在于管道引入了子进程。

木有文化
木有文化
谢啦~忘记管道会建新进程
返回顶部
顶部