例えば$PATH
、$HOME
入力するとecho $PATH
、 が返されますが、実際の変数が表すものではなく、$PATH
単語をエコーしたいのですが、これも機能しません。$PATH
echo "$PATH"
答え1
ドルから逃げる必要があるだけです$
。
echo \$PATH
$PATH
または、一重引用符で囲みます:
echo '$PATH'
$PATH
これにより、単語がシェルによって解釈されなくなります。
答え2
$
ほとんどのシェルの構文では、 は非常に特殊な文字です。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"
その他複雑なものも…
$
または、別の方法で出力することもできます:
- Unix準拠
echo
:echo '\044PATH'
(他のものもecho
必要echo -e '\044PATH'
) printf '\44PATH\n'
猫 << \EOF $PATH 終了
これらのバックスラッシュも明らかにシェルにとって特別なものであるため、引用符で囲む必要があることに注意してください。
ここまでで、実行方法はたくさんあるものの、ここ以外を使用する理由はないということがはっきりしたと思いますecho '$PATH'
。
答え3
二重引用符内のリテラル $ は問題になる可能性があることに注意してください。次のように、二重引用符の外側に $ を作成することで解決できます。
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
答え4
使用:
echo ''\$PATH'' >> output.txt
これはうまくいくでしょう。