忍者ブログ

エンジニア初心者の備忘録

エンジニア初心者が躓いたことハマったことを公開します!

Linuxのシェルやコマンドにおいてシングルクォートとダブルクォートを同時にリテラルとして使用する

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

コメント

ただいまコメントを受けつけておりません。

Linuxのシェルやコマンドにおいてシングルクォートとダブルクォートを同時にリテラルとして使用する

今回は、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でシングルクォートのエスケープ』
『シェルコマンドでシングルクォートに囲まれたシングルクォートのエスケープ』
PR

コメント

プロフィール

HN:
プラムザ 太郎
性別:
非公開

P R