30

構成-ne、、、-eqおよび-gtは少なくとも奇妙に見えます。

if ($true -eq $true){}

だがしかし

if ($true = $true){}

説明は何ですか?

4

3 に答える 3

38

基本的に答えは、Unixがそれを永遠に行ってきた方法であるということです。案の定、使用するBashスクリプトを作成する場合、PowerShell構文の知識を1対1でBashに転送するのは実際には便利です。

これについては、BrucePayetteのWindowsPowerShell in Action、Second Edition(Kindle Location 3391)で詳しく説明されています。

PowerShell言語で最も論議を呼んでいる設計上の決定について話しましょう。

そして勝者は次のとおりです。>、> =、<、<=、==、!=などの従来の記号を比較に使用しなかったのはなぜですか。

答えは、>文字と<文字が出力リダイレクトに使用されるということです。PowerShellはシェルであり、過去30年間のすべてのシェル言語でI / Oリダイレクトに>と<が使用されているため、PowerShellでも同じことを行う必要があると人々は期待していました。PowerShellの最初のパブリックベータ中に、このトピックは何ヶ月も続く議論を生み出しました。

>がより大きいことを意味する場合もあれば、リダイレクトを意味する場合もあるモーダル構文解析など、さまざまな代替案を検討しました。リダイレクトまたは比較のために、:>や->などの演算子の代替文字シーケンスを調べました。私たちはユーザビリティテストを行い、フォーカスグループを開催し、最終的には私たちが始めたものに落ち着きました。

リダイレクト演算子は>と<であり、比較演算子はUnix test(1)コマンドから取得されます。これらのオペレーターは30年の血統を持っているため、PowerShellで使用するのに十分かつ適切であると期待しています。(私たちはまた、人々がこの決定について不平を言うことを続けることを期待していますが、30年以上はないことを願っています。)

于 2012-04-24T00:43:35.923 に答える
7

><はほとんどのシェルでストリームリダイレクト演算子であるためです。PowerShellがストリーム入力リダイレクトをサポートしていないことを除いて。それはさておき、>stdoutをリダイレクトする場合や、場合によっては、解析/解釈するのがより困難になる場合がありgreater thanます。さらに、この-<operator_name>アプローチを使用すると、直感的な記号よりもはるかに多くの演算子を使用できます。たとえば、-contains、-notcontains、-is、-replace、-split、-matchなどです。PowerShellでman about_operatorsサポートされているすべての演算子を探索するための開始点として実行します。 。

于 2012-04-24T00:05:05.547 に答える
2

演算子=はすでに代入演算子です。比較と代入演算子を混同しないように、彼らは別の演算子を選択します。この場合、-eqは他の(UNIX)スクリプト言語ですでに使用されているためです。

于 2014-07-30T08:26:33.540 に答える