今回は、Linuxのシェルやコマンドにおいてシングルクォートとダブルクォートを同時にリテラルとして使用する方法について整理して書き留めておきたいと思います。
まず、このようなケースを考える必要が出てきた経緯をご説明したいと思います。
以前の記事(
『ssh接続のパスワード入力を自動化する~プログラム超初心者のためのLinuxコマンド~』)で書いたsshpssコマンドを使用する際、パスワードのオプション部分にべた書きするパワードにシングルクォートとダブルクォートが含まれているケースがありました。
「plu'm"sa」のような感じです。
「plu'm"sa」をリテラルとして使用するために、単純にシングルクォートとダブルクォートで囲んだ場合、どの様な挙動になるのか確認してみます。
ケース1:シングルクォートで囲んだ場合
$ echo 'plu'm"sa'
>
失敗ですね...
ケース2:ダブルクォートで囲んだ場合
$ echo "plu'm"sa"
>
失敗ですね...
この解決方法としては、次の2つの方法があります。
方法1:シングルクォートを「'\'」でエスケープする
$ echo 'plu'\''m"sa'
plu'm"sa
方法2:一旦、リテラルのシングルクォートの前でシングルクォートを閉じて、シングルクォートをダブルクォートで囲む。
そして、開始のシングルクォートを追加してリテラル部分を閉じる
$ echo 'plu'"'"'m"sa'
plu'm"sa
この2つの方法の内、別の記事でまとめた下記の結論から判断すると、方法1が妥当なのではないかと思います。
このクォートの挙動の違いから考えると、シェルやコマンドである数値や文字列をリテラルつまり定数として確実に使用するためには、「'」(シングルクォート)で囲むことが基本となるのではないかと思います。
『Linuxのシェルやコマンドにおけるクォートについて』
以上です!
【参考サイト】
『Bashで文字列をエスケープをする』
『bash&zshでシングルクォートのエスケープ』
『シェルコマンドでシングルクォートに囲まれたシングルクォートのエスケープ』