たとえば、$PATH
および$HOME
echo $PATH
と入力すると、_$PATH
が返されますが、実際の変数が表すものではなく、単語$PATH
をエコーしたいのですが、echo "$PATH"
も機能しません。
あなたはただドルをエスケープする必要があります$
.:
echo \$PATH
$PATH
または、単一引用符で囲みます。
echo '$PATH'
$PATH
これにより、Wordがシェルによって解釈されないようになります。
ほとんどのシェルの構文の_$
_は、非常に特殊な文字です。 Bourneのようなシェルだけを見る場合、それは導入に使用されます。
$#
_、_$var
_、_${foo:-bar}
_のようなパラメータ展開$(logname)
のようなコマンド置換(サブシェルを回避するために一部のシェルでは_${ logname;}
_も)$((1+1))
のような算術展開(一部のシェルでは_$[1+1]
_も)。$'\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"
_および他の複雑なもの...または、_$
_を別の方法で出力することもできます。
echo
:_echo '\044PATH'
_(他のecho
sには_echo -e '\044PATH'
_が必要)printf '\44PATH\n'
_猫<<\EOF $ PATH EOF
これらのバックスラッシュはシェルにとっても特別であるため、引用符で囲む必要があることに注意してください。
多くの方法がありますが、ここで_echo '$PATH'
_以外のものを使用したいという正当な理由はないことを今までに明確にしておくべきです。
二重引用符内のリテラル$が問題になる可能性があることに注意してください。これは、次のように二重引用符の外に$を生成することで実行できます。
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