2016-03-19 3 views
1

Я пытаюсь сравнить две строки, которые идентичны, как я могу видеть в журнале отладки следующие строки:Сравнивая длинные строки с пробелами

echo "line: $line" 
echo "fingerPrints:$i ${fingerPrints[$i]}" 

31 + echo 'line: DCD0 5B71 EAB9 4199 527F 44AC DB6B 8C1F 96D8 BF6D' 
32 + echo 'fingerPrints:1 DCD0 5B71 EAB9 4199 527F 44AC DB6B 8C1F 96D8 BF6D' 

Но когда я пытаюсь линию после того, как для сравнения тех, струнные,

if ["$line" ne "${fingerPrints[$i]}"]; then 

это то, что происходит:

33 + '[DCD0 5B71 EAB9 4199 527F 44AC DB6B 8C1F 96D8 BF6D' ne 
'DCD0 5B71 EAB9 4199 527F 44AC DB6B 8C1F 96D8 BF6D]' ./gentoo-stage.sh: 

line 33: [DCD0 5B71 EAB9 4199 527F 44AC DB6B 8C1F 96D8 BF6D: command not found 

Я не пытаюсь проверить, если одна строка содержит уплотнительное они просто, если они эукал.

Те же результаты, когда я пытаюсь использовать != вместо ne.

+0

Возможный дубликат [Как сравнить две строковые переменные в инструкции «if» в Bash?] (Http://stackoverflow.com/questions/4277665/how-do-comcompare-two-string-variables -в-ан-Условный оператор-в-Баш) –

ответ

2

Вы должны положить пробел после [ и до ]. Таким образом, вместо:

if ["$line" ne "${fingerPrints[$i]}"]; then 

Написать так:

if [ "$line" ne "${fingerPrints[$i]}" ]; then 

И "пе" не является оператором. Вы, вероятно, имел в виду != есть:

if [ "$line" != "${fingerPrints[$i]}" ]; then 

Btw -ne используется для сравнения целочисленных выражений, и вы сравнения строк, поэтому != действительно единственный оператор, который имеет смысл здесь.

Смежные вопросы