Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 为什么可以';在cat | while循环中设置的t值是否在循环后读取?_Shell_Scripting - Fatal编程技术网

Shell 为什么可以';在cat | while循环中设置的t值是否在循环后读取?

Shell 为什么可以';在cat | while循环中设置的t值是否在循环后读取?,shell,scripting,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 do

我不熟悉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

cat
是多余的,并且是问题的原因,因为“|”管道创建了子shell。这就是为什么退出while循环时,
$b
的值“丢失”的原因。只需将文件重定向到while read循环

#!/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
#/bin/bash
而read-r行
做
count1=$(回显“$行”| wc-c)
a=37
如果[“$count1”-等式“$a”];然后
b=0
其他的
c=1
打破
fi
完成<“PLAYARTE_TXT.TXT”
如果[[“$b”=0&“$c”!=1];然后
呼应成功
其他的
回波故障
fi
出口0

非常感谢,但是如何指定文件的读取位置?您的意思是什么?文件被重定向。再次查看我的代码。否则,如果要将文件名传递给脚本,可以使用
$1
(或
$@