Teratermマクロの引用符を入れ子する、について
追記:下のように考えなくても引用符はASCIIコードでリテラルの引用符と重複しませんでした。
"なら#34、'なら#39です。マクロ文はTTLマクロメーカーで確認できます。
ベクターから毎月メールでダウンロード数が送られてくるが、先月はttlerが50くらいあった。
いろんな環境でテストもしていないオモチャなので、そもそも動作しないという人の方が多い気もする。当初から気になっていた点には手をいれてみた。バージョンは0.2。
たとえばttlのsendlnコマンドなどに文字列を渡す場合、引用符で囲む。
しかし、その文字列内に同じ引用符を含む場合、そこで引用符の挟みが終了してしまい、残りの文字列が処理できないとしてエラーになってしまう。
またUNIXシェルでは一般に" "なら変数を展開し、' 'ならしないといった違いがある。
通常なら' 'と" "とを使い分けて入れ子にしてこれを回避する。たとえば
問題は、ttlerで自動作成する場合、どちらの引用符を使うかを行から判別しなければならないところ。
判別方法は、行の最初に見つかった引用符がどちらかで、それと違う引用符をつけるということにした。(これまではデータを変数にいれてRegExpで一括置換していたので、これに行ループを入れなければならなくなったので遅くなってしまった)
しかも、
ちなみにこういう場合は、一行目の改行文字をエスケープして2行に書き、
"なら#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}'