IFS和bash代码用于读取用户按下的输入

时间:2017-11-02 14:58:59

标签: bash

此代码是否有问题

IFS=''
for i in `seq 1 20`; do
        sleep 1
        echo $((20-$i)) seconds till abort ... 
done

variable="dummy"
read -p "Enter to continue" -t 1 -N 1 variable
echo -e "\n"
while [ "$variable" != $'\x0a' ] 
do
read -p "Enter to continue" -t 1 -N 1 variable
echo -e "\n" 
done

错误是20:表达式中的语法错误(错误标记为“2

如果我删除了IFS ='',那么倒计时工作正常,但是“输入继续”的部分会失败。

建议放IFS ='',因为我看到这个变量是字边界的分隔符吗?

1 个答案:

答案 0 :(得分:2)

通过将IFS设置为空字符串,您只进入循环一次,并且在循环的迭代中,变量i是20行字符串。 $(())不知道如何处理该字符串,因此它会告诉您语法错误。 (请注意,错误标记长度为19行,但您只关注第一行。)

如果你真的需要为脚本的其他部分操作IFS(你可能不会!),你可以这样做:

unset IFS
for i in $(seq 1 20); do
        IFS=''
        sleep 1
        echo $((20-$i)) seconds till abort ... 
done