没有发生双重“while”循环内的输入

时间:2016-09-01 09:44:53

标签: shell ksh

while read line
do
  echo "$line"
  i=0;
  rm -rf b.txt
  while [[ $i -lt $line ]]
  do
    i=`expr $i + 1`
    echo "$i " >> b.txt
  done
  a=`cat b.txt`
  for i in $a;
  do
    echo "Hari $i \c"
    read input
  done
done < 5.txt

5.txt 的值为:

2
3

此脚本需要将光标放在for循环内,但脚本会不断执行和结束。你能帮帮我吗?

1 个答案:

答案 0 :(得分:0)

假设 5.txt 包含:

2
3

脚本输出:

2
Hari 1 \c
Hari 2 \c

...然后退出。

输出Hari 1 \c后,脚本不会提示输入,因为所有输入来自 5.txt 。在第一次传递 $ input 将设置为 3 ,( 5.txt 的第二行)。在第二次传递中,输入将是EOF,在这种情况下read放弃,就像输出没有的方式一样:

read -p "Enter a number" n < /dev/null

这样可行:

for i in `cat 5.txt` ; do \
    echo $i ; for f in `seq $i` ; do read -p "Hari $f \c: " input ; done ; \
done

另请注意,$input从未用于任何事情。