Nói đúng cách string -match ...
và collection -match ...
là hai toán tử khác nhau. Giá trị đầu tiên nhận được giá trị Boolean và điền $matches
. Thứ hai nhận mỗi mục bộ sưu tập phù hợp với một mẫu và dường như không điền $matches
.
Ví dụ của bạn sẽ hoạt động như bạn mong đợi nếu tệp có chứa một dòng (toán tử đầu tiên hoạt động). Nếu tệp có chứa 2 dòng trở lên thì toán tử thứ hai được sử dụng và $matches
không được đặt.
Điều này cũng đúng đối với các toán tử Boolean khác được áp dụng cho bộ sưu tập. Đó là collection -op ...
trả về các mục có số item -op ...
là đúng.
Ví dụ:
1..10 -gt 5 # 6 7 8 9 10
'apple', 'banana', 'orange' -match 'e' # apple, orange
toán tử Boolean áp dụng cho các bộ sưu tập thuận tiện nếu sử dụng đúng cách. Nhưng họ có thể gây nhầm lẫn như tốt và dẫn đến dễ mắc sai lầm:
$object = @(1, $null, 2, $null)
# "not safe" comparison with $null, perhaps a mistake
if ($object -eq $null) {
'-eq gets @($null, $null) which is evaluated to $true by if!'
}
# safe comparison with $null
if ($null -eq $object) {
'this is not called'
}
Một ví dụ khác với -match
và -notmatch
có thể nhìn khó hiểu:
$object = 'apple', 'banana', 'orange'
if ($object -match 'e') {
'this is called'
}
if ($object -notmatch 'e') {
'this is also called, because "banana" is evaluated to $true by if!'
}
Nguồn
2011-12-28 05:09:11
Hiện một ví dụ với dữ liệu thực tế - bạn regex và văn bản phù hợp. – tripleee