2013-06-20 5 views
-1

Я следующий код в Powershell скрипт:Сравнение строк в Powershell

$service = "Letters – Email" 

$ss = "`"Letters - Email`"" 
$ss2 = "`"$service`"" 

$ss 
$ss2 

$ss2.CompareTo($ss) 
$ss -eq $ss2 

Выход этого:

"Letters - Email" 
"Letters – Email" 
1 
False 

Я не понимаю выход. Не могли бы вы помочь?

EDIT: Я понял, что проблема. Используемый дефис отличается. Извините за то, что потратил ваше время.

ответ

-1

Любые переменные внутри двойных кавычек будут расширены до их значения, поэтому, когда вы назначаете $ ss2, переменная $ $ расширяется до «Письма - электронная почта», поэтому обе переменные оказываются одинаковыми.

+0

Но вывод сценария предполагает, что они не равны. Разве это происходит только тогда, когда они записываются на консоль и игнорируются для сравнения? –

+0

@DanPuzey Они не равны. Прочтите мой ответ. EDIT: или вопрос отредактирован :) –

1

Там нет ничего плохого в том выводе, две строки различны:

$ss имеют -[char]45

$ss2 имеют -[char]8211

и метод compareTo для string возвращает это:

Less than zero 
This instance is less than strB. 

Zero 
This instance is equal to strB. 

Greater than zero 
This instance is greater than strB. 

-or- 

strB is a null reference (Nothing in Visual Basic). 

Прочтите here, чтобы узнать больше о методе string.compareTo.

+0

Характер 45 - это символ «дефис», символ 8211 - это так называемый 'en dash'. Они не просто разные персонажи, они также имеют другое значение, типографически. –

+0

@AnsgarWiechers Спасибо, мой английский не так хорош, чтобы давать имена типам [char];) –