2017-11-29 10 views
0

文字列に "\ $ CONDITIONS"という文字列を入れる必要があります。私は使用してみました:

> echo "\$CONDITIONS" 
$CONDITIONS 
> echo "\\$CONDITIONS" 
\ 

私を助けてくれませんか?取得するには何を入力する必要があります

\$CONDITIONS 

この結果、

+1

エコー "\\\ $条件"は私のために働いています...あなたのためではありません? –

+3

'echo '\ $ CONDITIONS''? – 123

答えて

0

\\\を使用してください。

#!/bin/bash 
echo "\\\$CONDITION" # prints \$CONDITION 
+1

より具体的には、先頭の '\'は '\\'を使い、変数 '$ CONDITION 'は' \ $ CONDITION'を使います。 –

1

echoはあなたが合格正確に文字列の印刷を除いて何もしません。トリックは、あなたがしたい文字列を渡すことができるようにするためのシェルについて十分に知ることです。

シェルで値の置換を実行する必要がない場合は、単引用符を使用してください。

echo '\$CONDITIONS' 

二重引用符を絶対に使用する必要がある場合でも、文字列の個々の部分を一重引用符で囲むことはできます。二重引用符に隣接する一重引用符は、シェルがそれを渡す前に単一の文字列に貼り付けられます。

echo '\$'"CONDITIONS" 

良い古いechoは多少疲れています。もう少し汎用性の高いprintfも考えてみてください。

printf "\x5c\x24CONDITIONS\n" 

(私は通常、ここにも一重引用符を使用すると思います。二重引用符は、ちょうどこれがさえ、二重引用符で機能することを実証している。しかし、バックスラッシュに注意してください;。これらは1つもバックスラッシュで動作するように起こります、しかし、多くの場合、あなたは二重引用符内のリテラルバックスラッシュをしたい場合、彼らは倍増する必要があります。)

自分の失敗に何が起こったのか確認するには、

echo "\$CONDITIONS" # produces $CONDITIONS 

バックスラッシュが正しくシェルからドル記号をエスケープし、 pとして取り除かれるプロセスの芸術。だからあなたは、リテラルドル記号とテキストCONDITIONSと言っています。ここ

echo "\\$CONDITIONS" # produces \ 

、バックスラッシュは、同様にバックスラッシュをエスケープ、そしてシェルが未設定または空である変数$CONDITIONSを拡張。

echo "\\\$CONDITIONS" 

これはうまく動作しますが、醜いです。バックスラッシュエスケープされたバックスラッシュとバックスラッシュエスケープドル記号とテキストCONDITIONSがあります。

バックスラッシュとドル記号(およびバッククォート`)は、一重引用符で処理されないため、文字列にこれらの文字列が含まれていると通常は使用する必要があります(さらに一般的には、これらの構成を処理するため)。

バックスラッシュは、二重引用符で囲まれたような種類のものです。シェルは処理するものを削除します(\$$に変わります)。実際には何もしません(\xは二重引用符で囲まれているので\xとして保存されます)。引用符を付けないと、動作は再び異なります。 (ちょうど引用符を使用してください)