web-dev-qa-db-ja.com

どうすればドル記号をエコーできますか?

たとえば、$PATHおよび$HOME

echo $PATHと入力すると、_$PATHが返されますが、実際の変数が表すものではなく、単語$PATHをエコーし​​たいのですが、echo "$PATH"も機能しません。

70
DisplayName

あなたはただドルをエスケープする必要があります$ .:

echo \$PATH
$PATH

または、単一引用符で囲みます。

echo '$PATH'
$PATH

これにより、Wordがシェルによって解釈されないようになります。

80
geedoubleya

ほとんどのシェルの構文の_$_は、非常に特殊な文字です。 Bourneのようなシェルだけを見る場合、それは導入に使用されます。

  1. _$#_、_$var_、_${foo:-bar}_のようなパラメータ展開
  2. $(logname)のようなコマンド置換(サブシェルを回避するために一部のシェルでは_${ logname;}_も)
  3. $((1+1))のような算術展開(一部のシェルでは_$[1+1]_も)。
  4. _$'\n'_や_$"localized string"_などの一部のシェルでの引用の他の形式。

最後のケースを除いて、これらの拡張/置換は依然として二重引用符内(およびbashまたは_$"..."_の_ksh93_内)で発生します。

その_$_が特別に扱われないようにするには、次のいずれかで引用符を付ける必要があります。

  • 単一引用符:_echo '$PATH'_または_echo '$'PATH_。ほとんどのシェルで(自分自身を除く)すべての文字をエスケープするため、一般的に使用するもの。
  • ブラックスラッシュ:_echo \$PATH_。また、二重引用符内:_echo "\$PATH"_
  • 一部のシェルでは、他の引用演算子:_echo $'$PATH'_、_echo $'\44PATH'_(ASCII互換文字セットを想定)、_echo $'\u0024'_

または、上記の拡張の有効な形式の一部ではないことを確認してください。

  • _echo "$"PATH_
  • _echo $""PATH_、_echo $"PATH"_。 _ksh93_やbashのような一部のシェルは_$"..."_形式の引用符をサポートするため、これらは避けてください。
  • _echo $``PATH_。それが可能であることを示す場合を除いて、それを使用する理由はありません。
  • _echo "${$+$}PATH"_および他の複雑なもの...

または、_$_を別の方法で出力することもできます。

  • unix準拠のecho:_echo '\044PATH'_(他のechosには_echo -e '\044PATH'_が必要)
  • _printf '\44PATH\n'_
  • 猫<<\EOF 
     $ PATH 
     EOF

これらのバックスラッシュはシェルにとっても特別であるため、引用符で囲む必要があることに注意してください。

多くの方法がありますが、ここで_echo '$PATH'_以外のものを使用したいという正当な理由はないことを今までに明確にしておくべきです。

21

二重引用符内のリテラル$が問題になる可能性があることに注意してください。これは、次のように二重引用符の外に$を生成することで実行できます。

echo "My terminal is $term, first file found in /dev is </dev/`ls /dev | head -n 1`>, the
dollar symbol is '"`echo '$'`"', and a newspaper costs "`echo '$'`"2.50."

or like this:

echo "$term is the value of "'$term'

出力:

My terminal is xterm, first file found in /dev is </dev/acpi>, the dollar symbol
is '$', and a newspaper costs $2.50.

xterm is the value of $term
1
Stilez