シェルコマンドでシングルクォートに囲まれたシングルクォートのエスケープ

たとえば、シングルクォーテーションを使用したディレクトリ名を作成したい場合、以下のようにコマンドを入力することで、ディレクトリ名にシングルクォーテーションが使用できる。

$ mkdir test\'

つまり単純にシングルクォーテーションをバックスラッシュでエスケープしてやればよい。

削除したいときも同じ。

$ rm -fr test\'

ここまでは普通。

では、ディレクトリ名をシングルクオーテーションで囲みたいときはどうするのか?
通常、ターミナルでコマンド入力するときは、このようなシチュエーションはないが、PerlやPHPからsystem()などでコマンドを実行したい場合に、そうしたいときがある。

すくなくとも、このときはそう思った。(恥)

実はこの場合、バックスラッシュでエスケープしても意味が無い。

$ rm -fr 'test\''  # これではダメ

そこで、phpのescapeshellargがどうしているのかを確認した結果、いかのようにするのが正しいことがわかった。

$ rm -fr 'test'\'''

なんか腑に落ちない気もするが、実際にこれでうまくいったので。。。ちょっと不安。