2020-02-28-01-エスケープ処理って難しい - project-enigma

2020-02-28-01-エスケープ処理って難しい

>> Site top >> weblog >> 月別アーカイブ >> 2020年02月のlog >> 2020-02-28-01-エスケープ処理って難しい

最終更新日付:2020/02/29 17:26:29


エスケープ処理って難しい

2020 年 02 月 28 日

継続行入力の処理はなんとか完了して、その後スクリプト側でも継続行の対応をしていた。for なんかの制御構造は個別に対処しなければならない事情があったわけだ。そして、バックスラッシュを使ったエスケープ処理にも取り組んだ。bash の挙動に合わせる努力をしてたんだけど、ぱっと見た感じカオスで驚いてた。

今となってはなんとなく理解したのでもうカオスとは思わないけど、シングルクォート文字列は変数展開もエスケープ処理もせず、ダブルクォート文字列は基本的に両方とも処理する。ただしダブルクォートとバッククォート、およびバックスラッシュだけがエスケープの対象で、それ以外の文字がバックスラッシュに後続する場合、バックスラッシュはそのまま保持される。面倒なのはバッククォート文字列で、バッククォート文字列としてはバックスラッシュとバッククォートのエスケープだけ処理して、それがサブコマンドとして処理される際に各種クォートの有無に応じて再度処理される‥‥‥と。以上が bash を観察した結果で、それを fist でも実現するハメに陥った。そしてどうにかこうにか動作するようになって、これを書いている、と。

しかし、これを書いている最中にも、色々心配になって来てる。バッククォート文字列の内部にシングルクォート文字列があって、その中に変数展開に見える文字列があったら誤って展開してしまうんじゃないかとか、というかそもそもその場合の正しい挙動はどうなのかとか。ていうか、これを書きながら試してみたらやっぱりバグってた。ああもう。

 

コメント

このページにコメントする

 

このページのタグ

Page tag : fist

 

 


Copyright(C) 2005-2020 project-enigma.
Generated by CL-PREFAB.