2016-05-22 12 views
1

Hello Worldhello worldを比較したいと思います。結果は同じであるかのように真でなければなりません。私はここで間違って何をやっている大文字小文字を区別しないで比較する

./testScript.txt: line 20: 0à»: hello world==hello world : syntax error in expression (error token is "world==hello world ") 
+ echo false 

:私はやってる:

while read line; do 

    newLine="$newLine$line" 
done < $1 

newp="Hello World" 
if ((${newp,,}==${newLine,,})); then 
    echo "true" 
else 
    echo "false" 

fi 

は私がからなるテキストファイル渡すとき:

#filename: file.txt 

hello world 

出力があると思われますか?また、関係のないビットは、file.txtにある行を文字列(newLine)に渡す方法はありませんか?while私はやったことがありますか?

+1

'((a == b))'は数学と数を表します。 '[[" $ a "=" $ b "]]'は文字列用です。スペースはオプションではありません。 –

+0

特定の質問に答えても、周囲のループは、どのテストでも 'x \ y'が' xy'にマッチし、他のfalse [mis]マッチを持つことができることを意味します。 [なぜシェルを使ってループを処理するかをテキストで判断する](http://unix.stackexchange.com/questions/169716/whyis-using-a-shell)を参照してください。 -loop-to-process-text-consider-bad-practice)を使用します。 –

+0

他のスタイルをテストするために 'grep -v'を' hello world'の一つのスタイルで使うことができます。 – boardrider

答えて

7

カンマを追加し、二重括弧を一重括弧に変更する必要があります。

if [ "${newp,,}" = "${newLine,,}" ]; then 

そして、そのwhileループとの関係で...それはあなたが何をしたいかに依存します:if文は、何かのようにする必要があります。この場合のように、あなたはファイル全体を取得し、単一の文字列として保存したい、場合は、単に行うことができます:

line=$(cat $1) 
私はあなたが解析しようとしている場合にのみ、あなたが書いたループを使用することをお勧め

行ごとにファイルを追加します。つまり、if文を追加したり、異なる変数を使用したりします。しかし、このような単純なケースでは、catはうまくいくでしょう。

+0

素晴らしいです、ありがとうございます。 – LamaEu

+0

周囲のループは、このテストで 'x \ y'が' xy'にマッチし、他の誤ったマッチを持つ可能性があることを意味します。 [なぜシェルを使ってループを処理するかをテキストで判断する](http://unix.stackexchange.com/questions/169716/whyis-using-a-shell)を参照してください。 -loop-to-process-text-consider-bad-practice)を使用します。 –

0

[[caseで使用する大文字と小文字を区別しないパターンマッチングを可能にするshell option,nocasematchがあります。今シェルオプションを有効にして再度試みる

$ var1=lowercase 
$ var2=LOWERCASE 
$ [[ $var1 == $var2 ]] && echo "Matches!" || echo "Doesn't match!" 
Doesn't match! 

$ shopt -s nocasematch 
$ [[ $var1 == $var2 ]] && echo "Matches!" || echo "Doesn't match!" 
Matches! 

あなたがいない場合だけshopt -u nocasematchで再びそれをオフにしてください唯一のケースによって異なる文字列を比較する

したいすべて比較大文字小文字を区別しません。

関連する問題