作者: Koichi Yamamoto
日時: 2004/5/3(12:04)
こんにちは、山本です。

"HFC01730@... (水羽信男)"さんは書きました:
> ★次の三つは所期の結果を得られません★★

tkconやwishで入力されたコマンドはTclのコマンドラインとして
解釈されます。もしコマンド名がTclのコマンドでなかったら、
Tclのexecコマンドを使って外部プログラムを実行するように
なっています。このような仕組みにより、

> % gawk "{print $1}" test.txt
> can't read "1": no such variable

$1の部分はTclの変数置換(Variable substitution)が働いていますし、

> % gawk "{gsub(/[-]/,\"_\");print}" test.txt
> invalid command name "-"

[-]の部分はコマンド置換(Command substitution)が働いていますし、
(\"の部分も\置換(Backslash substitution)が働いている)

> % gawk --ctype=UTF8 "{gsub(/-/,\"_\");print}" test.txt>test2.txt
> gawk: cmd. line:2: fatal: cannot open file `test.txt>test2.txt' for ;
> reading (Invalid argument)

最終パラメータが"test.txt>test2.txt"となってgawkに渡されてしまいます。

> ◎これで問題はありません◎◎
> % gmwk --ctype=UTF8 "{gsub(/-/,\"_\");print}" test.txt >test2.txt

最終引数">test2.txt"の先頭に">"があるため、
Tclのexecコマンドがtest2.txtにリダイレクトするように処理しています。

この前の例↓では、{記号の前に不要な\記号が追加されていたので
execコマンドのバグであることを説明しましたが、tkconやwishの上で
gawkやperlなどのスクリプトを実行しようとすると、Tclの文法が作用して
いろいろ問題が生じてしまいますね。

> % gawk --ctype=UTF8 "{gsub(/[ ]+/, \"-\");\
>   print}" keguan_py.txt
> gawk: cmd. line:1: \{gsub(/+/, "-");print}
> gawk: cmd. line:1: ^ backslash not last cha\
>       racter on line

--
Koichi Yamamoto, 
http://homepage3.nifty.com/yamakox/