2012-04-23 45 views

Trả lời

34

Về cơ bản, câu trả lời là nó là cách mà Unix đã thực hiện nó mãi mãi. Chắc chắn, nếu bạn viết một số kịch bản lệnh Bash, đó là những gì bạn sẽ sử dụng và thật sự tốt khi có sự chuyển giao kiến ​​thức cú pháp PowerShell của bạn trên một cho Bash.

Nó được trả lời chi tiết trong số Windows PowerShell hành động, ấn bản thứ hai (Kindle Location 3391) của Bruce Payette.

Hãy nói về quyết định thiết kế gây tranh cãi nhất trong ngôn ngữ PowerShell .

Và người chiến thắng là: tại sao chúng tôi không sử dụng các ký hiệu thông thường để so sánh như>,> =, <, < =, == và! =?

Câu trả lời là các ký tự> và < được sử dụng để chuyển hướng đầu ra. Vì PowerShell là một trình bao và tất cả ngôn ngữ shell trong 30 năm qua đã sử dụng> và < cho chuyển hướng I/O, mọi người mong đợi rằng PowerShell cũng nên làm như vậy. Trong phiên bản beta công khai đầu tiên của PowerShell, chủ đề này được tạo ra trong nhiều tháng.

Chúng tôi đã xem xét một loạt các lựa chọn thay thế, chẳng hạn như phân tích phương thức đôi khi> có nghĩa là lớn hơn và đôi khi nó có nghĩa là chuyển hướng. Chúng tôi đã xem xét chuỗi ký tự thay thế cho các toán tử như:> hoặc ->, để chuyển hướng hoặc so sánh. Chúng tôi đã thử nghiệm khả năng sử dụng và tổ chức các nhóm tập trung và cuối cùng, đã giải quyết những gì chúng tôi đã bắt đầu.

Các toán tử chuyển hướng là> và < và toán tử so sánh là được lấy từ lệnh kiểm tra Unix (1). Chúng tôi hy vọng rằng, bởi vì các nhà khai thác này có phả hệ 30 năm, chúng phù hợp và thích hợp để sử dụng trong PowerShell. (Chúng tôi cũng hy vọng rằng mọi người sẽ tiếp tục khiếu nại về quyết định này, mặc dù hy vọng không phải trong 30 năm nữa.)

6

>< là các toán tử chuyển hướng luồng trong hầu hết các trình bao. Vâng, ngoại trừ PowerShell không hỗ trợ chuyển hướng đầu vào luồng. Điều đó sang một bên, sẽ khó phân tích/giải thích > trong một số trường hợp để được chuyển hướng stdout và trong các trường hợp khác greater than. Ngoài ra, bằng cách sử dụng phương pháp -<operator_name>, bạn có thể có nhiều toán tử hơn là có các ký hiệu trực quan, ví dụ: -contains, -notcontains, -is, -replace, -split, -match, vv Thực hiện man about_operators làm điểm khởi đầu để khám phá tất cả các toán tử được PowerShell hỗ trợ.

+1

trong trường hợp nào sẽ khó phân tích cú pháp '>' hơn? – Restuta

+0

Phạm vi của biểu thức nếu là khá hạn chế. Và tôi thậm chí không thể nghĩ cách đặt chuyển hướng ở đó. –

+0

và tôi không nghĩ rằng có nhiều toán tử hơn là đối số hợp lệ ở đây, tôi nghĩ rằng cách tiếp cận kết hợp sẽ hoạt động tốt hơn, các toán tử sau đây < >! = == 'được sử dụng rất thường xuyên và đáng để nó hỗ trợ chúng. – Restuta

2

Toán tử = đã là toán tử gán.Để không nhầm lẫn giữa so sánh và toán tử gán mà họ chọn cho một toán tử khác. Trong trường hợp này cho -eq bởi vì điều này đã được sử dụng trong các ngôn ngữ kịch bản (UNIX) khác.

+0

Cuối cùng, ai đó gọi OP ra ngoài sử dụng '=' chứ không phải '==': P –

Các vấn đề liên quan