POSIXシェル:単語の最後の文字の場合、「$」は特別な意味を失いますか?

POSIXシェル:単語の最後の文字の場合、「$」は特別な意味を失いますか?

私が走ると、Ashes、Sprints、Slamsで

$ echo ab$

それは戻ってくる

ab$

この動作はPOSIXで指定されていますか、それともPOSIX互換シェル間の一般的な規則ですか? POSIX Shell Command Language ページにこの動作に関する言及がありません。

ベストアンサー1

$それ自体には特別な意味はありません(try)。 (または)、、echo $などの他の後続の文字と組み合わせて拡張子を形成する場合にのみ特別な意味があります。$var${var}$(util)$((1+2))

「特別な」意味$は、拡張がPOSIX標準で定義されていることです。トークン認識:

現在の文字が引用符なしの$orの場合、`シェルは引用符なしの導入文字シーケンスor、または、および$${パラメータ$(拡張`、コマンド置換、または算術拡張の候補の開始を識別する必要があります$((。シェルは、拡張するデバイスの端を決定するのに十分な入力を読み取る必要があります(引用した章で説明したように)。文字を処理するときに入れ子になった拡張または引用符のインスタンスが置換で見つかった場合、シェルは見つかった構成に指定されているとおりに繰り返し処理する必要があります。置換の開始から終了までに見つかった文字(組み込み構造を識別するために必要な再帰を許可する)は、埋め込まれた、または含まれる代替演算子または引用符を含む、変更されていない結果マークアップに含める必要があります。トークンは置換が終了するまで区切ってはいけません。

したがって、$拡張が形成されない場合、他の解析規則が適用される。

前の文字が単語の一部である場合は、現在の文字をその単語に追加する必要があります。

それはあなたのab$ひもを覆います。

別の場合$(「新しい単語」$自体は次のようになります):

現在の文字が新しい単語の先頭として使用されます。

これ重要性$非標準拡張を含む生成された単語は、POSIXでは明示的に指定されていないと定義されています。

また、$の最後の文字はですが、$$これは現在のシェルのPIDを保持する変数でもあります。では、bash履歴!$拡張を呼び出すことができます(前のコマンドの最後の引数)。したがって、一般的にいいえ、$引用されていない単語の終わりは意味がありませんが、単語の終わりは少なくとも標準的な拡張を意味しません。

おすすめ記事