エスケープ文字
2021/05/15 17:20
エスケープ文字
Tera Term マクロに限らずプログラムではエスケープ文字を利用したくなる場面があります。例えば、シェルで改行文字をエスケープすると、内容によっては長くなってしまう1行も、適切に改行することで見やすいスクリプトになります。
$ cat sample.sh #!/bin/bash the_first_value="5" the_second_value="6" printf "This sample calculation message %s + %s = %s\n" \ ${the_first_value} \ ${the_second_value} \ $((the_first_value + the_second_value)) $ bash sample.sh This sample calculation message 5 + 6 = 11例えば、括り文字 (シングルクォーテーション ' や、ダブルクォーテーション " のこと)をエスケープすると、括り文字の中で括り文字を扱うことができます。
$ echo "This is \"double Quotation\" sample" This is "double Quotation" sample
結論
結論を言うと、現時点*1において Tera Term にエスケープ文字はありません。代替方法
エスケープする方法がないため、上記の使用例に対する代替案を記します。ASCII コードを直指定
括り文字の中に括り文字を利用する場合は、ASCII コードを直に指定する方法があります。指定方法
ASCII コードを利用
Tera Term で ASCII コードを指定するには、文字に割り振られた番号に # を付与します。'#' で数値が記述場合、10進数 (0~9) での指定です。
'#$' で数値が記述されている場合、16進数 (0~F) での指定です。
たとえば Tera Term で文字 A を指定する場合、10進数では #65 を、16進数では #$41 を記述します。
ASCII コードで指定可能な文字については ASCII コード を参照してください。
制御文字/印字可能文字に関わらず指定可能です。
・ASCII コードでの代替指定
sprintf "This is "#34"double quotation"#$22 messagebox inputstr 'message test'
クォーテーションの種類を変える
厳密にいうと代替方法ではありませんが、シングルクォーテーションの中でダブルクォーテーションを利用することは可能です。sprintf 'This is "double quotation"' messagebox inputstr 'message test'
制限事項
上述のような ASCII コード指定する場合は、クォーテーションの中に入れることができません。・ASCII コードの指定をミスしている例
sprintf "This is #34double quotation"#$22 messagebox inputstr 'message test'
また、一連の文字列にはスペースを入れることができません。
・ASCII コードが反映されない例
sprintf "This is " #34 "double quotation"#$22 messagebox inputstr 'message test'
スペースも ASCII コードで指定可能なので、以下のように記述します。
・スペース文字を指定した例
sprintf "This is"#32#34"double quotation"#34 messagebox inputstr 'message test'
strconcat
文字列を、何列かに分けて組み立てたい場合は strconcat を利用することで代替できるかもしれません。もともと strconcat を使っているものを sprintf2 に代替したものが Linux SSH ですが、逆に sprintf2 を strconcat で分解する方法としても参考になると思います。