web-dev-qa-db-ja.com

POSIX shはどのような種類の文字列補間をサポートしていますか?

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

7
mcandre

"${blah}""$blah"は移植可能なシェル構文です。これらはすべてのPOSIX準拠シェルと従来のBourneシェルで機能します。 POSIXには、変数展開の他の機能も必要です。

  • ${VAR#PREFIX}${VAR##PREFIX}${VAR%SUFFIX}${VAR%%SUFFIX}による文字列操作。
  • ${VAR-DEFAULT}${VAR=DEFAULT}${VAR+FALLBACK}${VAR?MESSAGE}による未設定の変数、および:-:=:+:?による未設定または空のバリアントの条件付き処理。
  • ${#VAR}による可変長。

すべての場合において、$…の結果は、二重引用符で囲まれていない限り(または複数の単語を許可しないいくつかのコンテキストでない限り)、空白分割(より正確には、$IFS文字で分割)およびワイルドカード展開(グロビング)を受けることを覚えておいてください。

仕様を読むことで、POSIXに存在するものを調べることができます。 POSIXの最新バージョンは Open Group Base Specifications (オプションのコンポーネントなし)と同じです。古いバージョンは Single Unix v2 のサブセットです。

POSIXシェルのないUnixライクなシステムは、今日では非常にまれです。 /bin/shは、いくつかのシステム、特にSolarisでは非POSIX Bourneシェルですが、POSIXシェルを使用できます(Solarisでは/usr/xpg4/bin/sh。PATHで/usr/xpg4/binより前に/usr/binが必要です)。 Bourneシェルとの互換性が必要な場合は、対象となるシステムのマニュアルページを確認してください。shには、わずかに異なる機能セットを備えたバージョンが多数あるためです。 Sven Mascheckは多くの情報を含むページを管理しています

POSIX仕様の Parameter Expansion のセクションには次のように記載されています...

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

$ {式}

式は、一致する '}'までのすべての文字で構成されます。

snip

パラメータ展開の最も単純な形式は次のとおりです。

$ {parameter}

次に ダブルクォート ...のセクションで.

二重引用符( "")で文字を囲むと、二重引用符内のすべての文字のリテラル値が保持されます。

$dollar-signは、特別な意味を保持し、パラメーター展開(パラメーター展開を参照)、コマンド置換の形式(コマンド置換を参照)、および算術を導入します。拡張(算術拡張を参照)。

あ、はい。

2
B Layer