« ビブリア古書堂の事件手帖―栞子さんと奇妙な客人たち/三上延 | Main | Cygwinで"fatal error - unable to remap"と言われた »

PowerShell がステキ

全部小文字で書いたSQLを大文字にしてくれと言われたとしましょう。

自分のPCで作業していたのなら、Rubyでワンライナです。が、後の比較のため、あえてirbで。

>> File.foreach("t:\hoge.txt"){|i| print i}
select * from syscat.tables
where tabname like 'members'=> nil
>> File.foreach("t:\hoge.txt"){|i| print i.upcase}
SELECT * FROM SYSCAT.TABLES
WHERE TABNAME LIKE 'MEMBERS'=> nil

でも、お客様先のPCで作業していると、ちょっと途方に暮れます。変換するVBScriptを書く?うーん、手で変えた方が早いかも・・・

しかし、PowerShellがあれば

PS T:\> dir hoge.txt
    ディレクトリ: T:\
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2012/01/17     17:44         57 hoge.txt
PS T:\> cat hoge.txt
select * from syscat.tables
where tabname like 'members'
PS T:\> ${t:hoge.txt} |foreach{$_.ToUpper()}
SELECT * FROM SYSCAT.TABLES
WHERE TABNAME LIKE 'MEMBERS'

はうっ!これだよ、欲しかったのはこれだよ!もうWin7じゃないPCでは仕事しなくないっす!

てなわけで、言語設計者自ら書いた(いわゆるバイブルって事ですな)この本を見ながらお勉強中。

合間合間に「なぜこういう設計にしたか」というコラムが挟まっていて、そこにはcmd.exeやKshはもちろんのこと、Perl($_があるしね)やPython(一番参考にされてるのはこれかな)、Ruby(「whereは要するにRubyの.matchです」)やLISP(「要するに、これはlambdaです」)まで言及されてます。楽しく読めます。

そして、これらのエエトコ取りをするために、そしてインタラクティブシェルで便利に使えることを優先的に考えるために、ものすごーく考え抜いた設計になっていることがわかります。決して美しくはないですが、これだけ勉強して考えに考え抜いていると、私ごときが文句を付ける余地なんてありません。いや、この本を読んでなければ

while( $i -lt 10000)

とか見たら、「ダサっ」って言ってたと思いますけど、

PowerShell言語において最も議論を呼んだ設計上の決断とは、「>」、「>=」、「<」、「<=」、「==」、「!=」のような、比較のための従来のシンボルをあえて使用しなかったことです。これはきわどい問題でしたが、その理由は、出力リダイレクトに「>」と「<」が使用されているためでした。

(中略)

使いやすさを評価するテストを実施し、フォーカスグループを立ち上げ、結局、最初の暗に落ち着きました。

(略)

これらの(リダイレクト)演算子は30年もの歴史を持つため、PowerShellで使用するのにふさわしいものであると考えています(この決断は今後も批判されるでしょうが、30年間も続かないことを願っています)。

こう書かれちゃうと、しょうがなかったんだろうなあと素直な気持ちになります。いや、Kshを書くときだって

IF [ $i -lt 10000]

と書かずに

IF (( i < 10000))

って書いちゃうんですけど、我慢しますよ。

|

« ビブリア古書堂の事件手帖―栞子さんと奇妙な客人たち/三上延 | Main | Cygwinで"fatal error - unable to remap"と言われた »

パソコン・インターネット」カテゴリの記事

Comments

ExcelのUpper関数か、Wordの大文字変換ボタンかな・・・。

Posted by: nac | January 17, 2012 at 11:43 PM

cmd で cat が使えてる事にちょっと驚いたXP使いが通りますよ。
と思ったけど、alias入れてるのかな?

Posted by: ふみ~ | January 18, 2012 at 02:38 PM

>nac

あー、Excelかー。忘れてた。まあ、標準じゃないけどExcelが導入されてる確率は高いからアリですな

> ふみ~

いやいや、上の実行例はcmdじゃないぞ。PowerShellは言語でもあるが、シェルでもあるのです。PS T:\>ってプロンプトはpowershell.exeが出しています。ちなみに、ここで呼ばれているcatが何者かと言えば、Get-Contentというコマンドレットのエイリアスです。それは以下のようにすればわかります

PS T:\> Get-Command cat

CommandType Name Definition
----------- ---- ----------
Alias cat Get-Content
Application cat.exe C:\cygwin/bin\cat.exe

あ、あれ?どっちが呼ばれたんだろう・・・

Posted by: Tambourine | January 18, 2012 at 05:36 PM

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/47905/53759344

Listed below are links to weblogs that reference PowerShell がステキ:

« ビブリア古書堂の事件手帖―栞子さんと奇妙な客人たち/三上延 | Main | Cygwinで"fatal error - unable to remap"と言われた »