Bash(Ubuntu) - whileループの文字列?

Bash(Ubuntu) - whileループの文字列?

ユーザーが "next"という単語を入力するまで続かないbashでwhileループを作成しようとしています。しかし、条件を満たすために文字列を使用する方法を理解できないようです。

#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 (シェルを行う計画であれば考慮する価値があります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スクリプト:比較タスク

関連情報