Bash (Ubuntu) - while 循环中的字符串?

Bash (Ubuntu) - while 循环中的字符串?

我试图在 bash 中创建一个 while 循环,直到用户输入单词“next”后才会继续。但我似乎无法弄清楚如何使用字符串来满足条件。

#Beginning of code
echo -e "Please type next to continue."
read word 
while [ "$word" -ne "next" ]
do 
    read word
done
#the rest of the code

答案1

使用!=而不是-ne

echo -e "Please type next to continue."
read word 
while [ "$word" != "next" ]
do 
    read word
done

检查比较运算符。 http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-11.html

答案2

正如其他人所说,您不应该使用-ne整数比较来比较字符串 - 而应该=/!=test [括号中使用]。尽管如此,即使这样充其量也是脆弱的——字符串必须完全匹配,并且'' 平等的''case在这种情况下处理 s 通常会更好:

set --
while   read  word
        case $?$#$word            in 
        ($?$#[Nn][Ee][Xx][Tt]) ! :;;
        ([!0]*|05*) ! break       ;;esac
do      set '' "$@"
done   

提供了默认值$IFS (如果你打算做 shell 的话,这是值得研究的read,这应该适用于任何上/下值next (如果您需要的话)并防止循环无休止地跑掉。

答案3

我想你想要:

echo 'Please type "next" to continue.'
while read word && [ "$word" != next ]; do
  : something in the loop if needed
done

最好还检查标准输入上的文件结尾(此处通过检查 的退出状态read)。

答案4

您使用了错误的比较运算符。您应该对字符串使用“!=”,对整数使用“-ne”,如下所示:

#Beginning of code
echo -e "Please type next to continue."
read word
while [ "$word" != "next" ]
do
    read word
done
#the rest of the code

查看此页面:高级bash脚本编写:比较操作

相关内容