Linuxコマンドで引数にダブルクォーテーションを含めたいときの対処法

※当サイトではアフィリエイト広告を利用しています

Linuxのシェルでコマンドを実行する際、--option "引数" のようにダブルクォーテーションで引数を囲むことがあります。

しかし、その引数の中にさらにダブルクォーテーション(”`”)を含めたい場合、うまくいかないことがあります。

この記事では、そんな場面での正しい書き方やエスケープ方法について解説します。


なぜダブルクォーテーションで囲むのか?

まず、Linuxコマンドで引数を " " で囲む主な理由は、スペースや特殊文字を1つの引数として認識させるためです。

mycmd --message "This is a test message"

これは "This is a test message" 全体が1つの引数になることを意味します。


引数内にダブルクォーテーションを含めたいケース

たとえば、次のような文字列を引数にしたいとします:

{"key": "value"}

このように JSON形式などで、内部にもダブルクォーテーションが必要な場合があります。単純に以下のように書いてもエラーになります:

mycmd --data "{"key": "value"}"

対処法:ダブルクォーテーションをエスケープする

シェルでは、文字列中の " を表現するためにはバックスラッシュでエスケープする必要があります:

mycmd --data "{\"key\": \"value\"}"

このように書けば、シェルは中の " を文字として解釈し、意図通りの引数になります。


シングルクォートを使う方法

もうひとつの方法として、外側をシングルクォート ' ' で囲むことも可能です。シングルクォート内では " をエスケープせずに使えます:

mycmd --data '{"key": "value"}'

こちらの方が読みやすく、JSONのように " を多用する文字列では推奨される方法です。


シングルクォート内にシングルクォートを含めたいときは?

まれに、シングルクォート ' を引数に含めたい場合もあります。例えば:

rustコピーする編集するHere's an example

これを引数として渡すには、外側をダブルクォートにし、内側の ' はそのまま使うことで実現できます:

bashコピーする編集するmycmd --comment "Here's an example"

逆に、' を含む文字列をシングルクォートで囲むとエラーになります。


まとめ

目的方法例
引数内に " を含める--opt "{\"key\": \"val\"}"
JSONをそのまま渡す--opt '{"key": "val"}'
' を含む文字列を渡す--opt "Here's something"

シェルでは、クォートの使い分けとエスケープは非常に重要です。エラーや意図しない動作の多くは、クォートの扱いミスによるものです。基本をおさえておくだけで、複雑な引数も安心して扱えるようになります。

コメント