文字列をBash CLIからの引数としてプログラムに渡す必要があります。
program "don't do this"
文字列には、'$'
、'\'
などの任意の文字を含めることができ、Bashに変更を加えたくありません。だから私は単一引用符を使うことを考えます。
ただし、以下は機能しません。
program 'don\'t do this' //escape doesn't work in single quote
次の2つは機能しますが、
program $'dont\'t do this' //seems fine, but any other side effects?
program 'dont'\''do this' //breaking into 3 parts
最初のアプローチは、修正前の取得が少ない(ドル記号を前に置き、すべての\
を\\
に置き換える)点で優れているように見えますが、ドル記号が他に何をするのかわかりません。
私は本当にこれをググってみましたが、必要なものが見つかりません...
エスケープシーケンスが解釈されます。
$ echo $'Name\tAge\nBob\t24\nMary\t36'
Name Age
Bob 24
Mary 36
(SOは間抜けな方法でタブを処理するので、これを自宅で試してください)
$
を接頭辞として使用すると、その名前の変数を検索するようにBASHに指示します。 $'
は、ANSI-C文字列処理を可能にする特別な構文( ここで完全に説明 )です。この場合、単一ティックは「次の単一ティックまで逐語的に値を取る」ではありません。安全に使用できます。欠点は、それがBASHのみであり、非常にまれであるため、多くの人々はそれが何を意味するのか疑問に思うでしょう。
より良い方法は、単一引用符を使用することです。文字列に一重引用符が必要な場合は、'\''
で置き換える必要があります。これにより、前の単一引用符付き文字列が終了し、それに単一引用符が追加され(\'
)、新しい単一引用符付き文字列が開始されます。この構文は Bourne Shell のすべての子孫で機能します。理解するのは非常に簡単で、ほとんどの人はすぐにパターンを認識します。
別の方法は、'"'"'
を使用して各単一ティックを更新し、「現在の単一引用符付き文字列を終了し、単一ティックのみを含む二重引用符付き文字列を追加し、単一引用符付き文字列を再開する」に変換します。これにより、エスケープ文字が回避され、見た目が対称的になります。二重引用符で囲まれた文字列に二重引用符が必要な場合は、逆の方法でも機能します:"'"'"
。