bash 的一个缺点:
使用eval,循环给变量赋值的时候,如果是下面这种形式,退出后,该值就会丢弃,如下:
cat ${ConfigFile} | while read Record
do
if [ "X${Record}" = "X" -o "X`echo ${Record} | awk '{print substr($0, 1, 1)}'`" = "X#" ]; then
continue
else
RecordLeft=`echo ${Record} | cut -d '=' -f 1 | awk '{ gsub( " ","", $0 ); print }'`
#echo $RecordLeft
RecordRight=`echo ${Record} | cut -d '=' -f 2 | awk '{ gsub( " ","", $0 ); print }'`
#echo $RecordRight
export $RecordLeft=$RecordRight
echo $ORA_USER
#echo "Set parameter name:[$RecordLeft] value:[$RecordRight]"
fi
done
如果使用重定向的话,就会扫除问题,必须使用下面的值进行赋值:
while read Record
do
if [ "X${Record}" = "X" -o "X`echo ${Record} | awk '{print substr($0, 1, 1)}'`" = "X#" ]; then
continue
else
RecordLeft=`echo ${Record} | cut -d '=' -f 1 | awk '{ gsub( " ","", $0 ); print }'`
#echo $RecordLeft
RecordRight=`echo ${Record} | cut -d '=' -f 2 | awk '{ gsub( " ","", $0 ); print }'`
#echo $RecordRight
export $RecordLeft=$RecordRight
echo $ORA_USER
#echo "Set parameter name:[$RecordLeft] value:[$RecordRight]"
fi
done < ${ConfigFile}

本文探讨了在Bash脚本中使用eval进行变量赋值可能导致的问题,特别是当赋值操作发生在循环中时,变量值可能无法正确保留。文章通过示例展示了如何通过重定向解决这一问题。

被折叠的 条评论
为什么被折叠?



