POSIX shはどのタイプの文字列補間をサポートしますか?

POSIX shはどのタイプの文字列補間をサポートしますか?

POSIX shで許可されていますか"${blah}"、またはbash派生シェルが必要ですか?

答え1

"${blah}"移植可能なシェル構文です"$blah"。これは、既存の Bourne シェルだけでなく、すべての POSIX 準拠シェルにも適用されます。 POSIXには、変数を拡張するための追加機能も必要です。

  • ${VAR#PREFIX}${VAR##PREFIX}、およびを使用して${VAR%SUFFIX}文字列操作を実行します${VAR%%SUFFIX}
  • 未設定の変数を処理するには、および条件文を使用し、および設定されていないか空の${VAR-DEFAULT}バリアントを使用します。${VAR=DEFAULT}${VAR+FALLBACK}${VAR?MESSAGE}:-:=:+:?
  • 可変長${#VAR}

すべての場合に二重引用符を使用しない限り(または複数の単語を許可しない他のコンテキスト)結果は、$…スペース分割(より正確には文字分割)とワイルドカード拡張(ワイルドカード拡張)を経ます。$IFS

仕様を読むと、POSIXに何が存在するかを確認できます。最新バージョンのPOSIXオープングループ基本仕様(オプションのコンポーネントなし)。以前のバージョンは次のサブセットです。シングルUnix v2

今日、POSIXシェルのないUnixシリーズシステムは非常にまれです。/bin/sh一部のシステム、特にSolarisではPOSIX Bourneシェルではありませんが、POSIXシェルを使用できます(/usr/xpg4/bin/shSolarisでは/usr/xpg4/binPATHでこれを進める必要があります)。/usr/binBourneシェルとの互換性が必要な場合は、多少異なる機能セットを持つ多くのバージョンのshがあるので、興味のあるシステムのマニュアルページを確認してください。Sven Mascheckは、多くの情報を含むページを管理します。

答え2

POSIX仕様セクションでパラメータ拡張説明する...

パラメータ拡張形式は次のとおりです。

${表現}

ここで、式は「}」の前のすべての文字と一致するもので構成されています。

せん断

パラメータ拡張の最も簡単な形式は次のとおりです。

${パラメータ}

だからおおよそ二重引用符...

二重引用符( "")で囲まれた文字は、バッククティックを除いて二重引用符内のすべての文字のリテラル値を保持する必要があります。

$のドル表示パラメータ拡張(パラメータ拡張を参照)、コマンド置換形式(コマンド置換を参照)、および算術拡張(算術拡張を参照)を導入する特別な意味は維持する必要があります。

そうですね。

関連情報