为什么不能在cat中设置值循环后循环读取?

时间:2010-04-14 09:45:24

标签: shell scripting

我是shell脚本的新手,我编写了一个脚本来标记while循环中的值,但如果我尝试在循环后访问这些值,则返回空值。为什么呢?

#!/bin/sh
cat PLAYARTE_TXT.txt|while read line
do
    count1=$(echo $line|wc -c)
    a=37
    if [[ $count1 -eq  $a ]];
    then
        b=0 
    else
        c=1
        break
    fi
done
if [ "$b" -eq "0" -a "$c" -ne "1" ];
then
    echo success
else
    echo failure
fi
exit 0

1 个答案:

答案 0 :(得分:2)

cat是多余的,是您问题的原因,因为“|” pipe创建一个子shell。这就是为什么当你离开while循环时,$b的值“丢失”。只需将文件重定向到读取循环

#!/bin/bash
while read -r line
do
 count1=$(echo "$line"|wc -c)
 a=37
 if [ "$count1" -eq  "$a" ];then
   b=0
 else
   c=1
   break
 fi
done  < "PLAYARTE_TXT.txt"
if [[ "$b" = 0 && "$c" != 1 ]];then
 echo success
else
 echo failure
fi
exit 0