点击[return]时打破一个bash循环

时间:2013-06-25 12:13:27

标签: bash loops break

在bash中,当[Return]键被击中时,是否有可能退出不等待用户输入的循环?

这是我所说的循环。关键是[q]。我希望它是[返回]。

#!/bin/bash

stty -echo -icanon time 0 min 0 # Don't wait when read the input

i=1

while [ 1 ]; do

   echo -ne "$i\r"

   ((i+=1))

   read key

   if [ "$key" == "q" ]; then break; fi # If [q] is hit, get out of the loop

done

stty sane # Come back to the classic behavior

exit 0

2 个答案:

答案 0 :(得分:2)

要检查用户是否完全按下返回(又名输入)而不是 Ctrl + d ,只需检查退出代码是否为零(因为 Ctrl + d Ctrl + c 将导致一个非零退出代码)并且该键为空:

if [ $? -eq 0 ] && [ -z "$key" ]
then
    break
fi

答案 1 :(得分:0)

如果用户键入<return>而未键入任何其他内容,$key将为空字符串。

也要检查空字符串:

if [ -z "$key" ]; then break; fi

根据the man page-z告知检查零长度字符串。