使えるツールは多いほうが都合が良いかもしれない、ということで。
ActivePerl 5.8.8.817 MSWin32-x86-multi-thread
D:\temp>perl -e "print 3 * 2" 6 D:\temp>perl -e "for ($i = 0; $i < 3; ++$i) { print \"$i\n\" }" 0 1 2 D:\temp>perl -e "foreach $i (0..2) { print \"$i\n\" }" 0 1 2 D:\temp>
GNU Awk 3.1.6
そういえば、BEGINだけなら入力データがなくても実行可能だった。『プログラミング言語AWK』にも似たような例があったので、元からこうなんだろう。
D:\temp>gawk "BEGIN { print 3 * 2 }" 6 D:\temp>gawk "BEGIN { for (i = 0; i < 3; ++i) print i }" 0 1 2 D:\temp>
GNU CLISP 2.41
出力用の手続きを呼ばなくても、評価した結果が表示されるみたい。
D:\temp>clisp -q -x "(* 3 2)" 6 D:\temp>clisp -q -x "(loop for i in '(0 1 2) do (print i))" 0 1 2 NIL D:\temp>
GNU bash 2.04.0(1)-release
shやbashを-cオプション付きで実行する、具体的なシチュエーションが思い浮かばない。MSYS付属のmakeなんかは内部的にsh(bash)を-c付きで実行してる気がするけど。
D:\temp>bash -c "expr 2 + 3" 5 D:\temp>bash -c "for i in 0 1 2; do echo $i; done" 0 1 2 D:\temp>
Gauche 0.8.13
最後に「-e "(exit)"」と付ける所が少し面倒。
D:\temp>gosh -e "(print (* 3 2))" -e "(exit)" 6 D:\temp>gosh -E "print (* 3 2)" -E exit 6 D:\temp>gosh -u srfi-1 -e "(for-each print (iota 3))" -e "(exit)" 0 1 2 D:\temp>
JavaScript-C 1.7.0 2007-10-03 (SpiderMonkey)
JavaScriptだってワンライナーの時代(かなり誇張)。オプション-eって伝統的なものなのかも*1。
D:\temp>js -e "print(3 * 2)" 6 D:\temp>js -e "for (i = 0; i < 3; ++i) print(i)" 0 1 2 D:\temp>js -e "for (i in Array(0, 1, 2)) print(i)" 0 1 2 D:\temp>
Ruby-mswin32 1.8.7 p72
本家のリファレンスにも書いてあるけど、perlのオプションと似ている。-0、-F、-n、-p、-rあたりと組み合わせると便利。
D:\temp>ruby -e "p 3 * 2" 6 D:\temp>ruby -e "3.times {|i| p i }" 0 1 2 D:\temp>ruby -e "0.upto(2) {|i| p i }" 0 1 2 D:\temp>ruby -e "(0..2).each {|i| p i }" 0 1 2 D:\temp>ruby -e "for i in 0..2; p i; end" 0 1 2 D:\temp>echo hoo:bar:baz: | ruby -072 -n -e "p $_ if !/\n/" "hoo:" "bar:" "baz:" D:\temp>
SCM 5e5
Gaucheと違って、最後に「-e "(exit)"」と付ける必要はない。
D:\temp>scm -e "(print (* 3 2))" 6 D:\temp>scm -c "(print (* 3 2))" 6 D:\temp>scm -r srfi-1 -e "(for-each print (iota 3))" 0 1 2 D:\temp>
tcsh-6.13.00 for Win32 7.09
ワンライナーだとforeachがうまく使えなかった。なんでだろう?
D:\temp>tcsh -c "expr 2 + 3" 5 D:\temp>tcsh -c "echo foo bar baz" foo bar baz D:\temp>