2016-05-22 90 views
1

我想比較Hello Worldhello world。結果應該是真實的,就好像它們是平等的。我做:比較字符串不區分大小寫

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 

輸出似乎是:

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

我在做什麼錯在這裏?此外,有點無關,有沒有辦法將file.txt中的行傳遞給一個字符串(newLine),而沒有這樣做while我已經完成了?

+1

'((a == b))'是數學和數字。 '[[「$ a」=「$ b」]]'用於字符串。空格不是可選的。 –

+0

即使你得到了你的具體問題的答案,周圍的循環意味着任何測試都會說'x \ y'匹配'xy'並且可以有其他錯誤的[錯誤]匹配。請參閱[爲什麼要使用shell循環處理文本被認爲是壞習慣](http://unix.stackexchange.com/questions/169716/why-is-using-a-shell -loop到過程文本視爲壞實踐)。 –

+0

您可以使用帶'hello world'風格的'grep -v'來測試其他風格。 – boardrider

回答

7

您應該添加逗號並將雙括號更改爲單個括號。如果陳述應該是這樣的:

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

而且與while循環有關......這取決於你想要做什麼。如果像在這種情況下,你想獲得整個文件並將其保存爲一個字符串,你可以簡單地做:

line=$(cat $1) 

我會建議你只使用該循環您寫的,如果你試圖解析逐行添加文件,即添加if語句,使用不同的變量等等。但對於這樣一個簡單的例子,cat將會很好。

+0

太棒了,謝謝。 – LamaEu

+0

周圍的循環意味着這個測試會說'x \ y'匹配'xy'並且可以有其他的錯誤匹配。請參閱[爲什麼要使用shell循環處理文本被認爲是壞習慣](http://unix.stackexchange.com/questions/169716/why-is-using-a-shell -loop到過程文本視爲壞實踐)。 –

0

有一個shell option,nocasematch,它可以啓用不區分大小寫的模式匹配與[[case一起使用。

比較,通過僅外殼不同的字符串:

$ 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再將它關閉想做全部比較不區分大小寫。

相關問題