<

![endif]-->

fc2ブログ

Teratermマクロの引用符を入れ子する、について

追記:下のように考えなくても引用符はASCIIコードでリテラルの引用符と重複しませんでした。
"なら#34、'なら#39です。マクロ文はTTLマクロメーカーで確認できます。


ベクターから毎月メールでダウンロード数が送られてくるが、先月はttlerが50くらいあった。
いろんな環境でテストもしていないオモチャなので、そもそも動作しないという人の方が多い気もする。当初から気になっていた点には手をいれてみた。バージョンは0.2。

たとえばttlのsendlnコマンドなどに文字列を渡す場合、引用符で囲む。
しかし、その文字列内に同じ引用符を含む場合、そこで引用符の挟みが終了してしまい、残りの文字列が処理できないとしてエラーになってしまう。
またUNIXシェルでは一般に" "なら変数を展開し、' 'ならしないといった違いがある。

通常なら' 'と" "とを使い分けて入れ子にしてこれを回避する。たとえば
cat "$BIN"/aho.txt
cat $BIN/aho.txt |awk '{print}'
 というコマンドを実行したい場合、このようにする。
sendln 'cat "$BIN"/aho.txt'
sendln "cat $BIN/aho.txt |awk '{print}'"

問題は、ttlerで自動作成する場合、どちらの引用符を使うかを行から判別しなければならないところ。
判別方法は、行の最初に見つかった引用符がどちらかで、それと違う引用符をつけるということにした。(これまではデータを変数にいれてRegExpで一括置換していたので、これに行ループを入れなければならなくなったので遅くなってしまった)

しかも、
cat "$BIN"/aho.txt |awk '{print}'
 などという行になると下のようになってもうだめぽ。
'cat "$BIN"/aho.txt |awk '{print}''
そもそもttlで実行できない書き方なので、限界といえば限界かもしれない。

ちなみにこういう場合は、一行目の改行文字をエスケープして2行に書き、
cat "$BIN"/aho.txt | \
awk '{print}'
とすれば大丈夫なはず。




comment

Secret

while(aho.atEndofStream)

笹部 政宏
笹部 政宏
mail




フリーソフツ
Category
はてブ
Monthly Archive
New Entry
New Comment
New Trackback
RSS
Copyright © Kittens flewby me All Rights Reserved.