Bourne シェル: パラメータ置換の末尾の "-" 演算子

Bourne シェル: パラメータ置換の末尾の "-" 演算子

一部のプロセスに進行状況バーを追加するためのシェルスクリプトを読んでいます。ここ)。この行を理解できません(オプション)。

#BAR_EXT=${BAR_EXT-}

コメントは、これが各ファイルに拡張子を追加することを示しています。たぶんもっと読む必要があるかもしれませんが - 演算子の使い方に慣れていません。

私は次の選択肢を知っています。バッシュリファレンスマニュアル:

${parameter:-word}

上記はnull値をparameter。 (少なくとも私はそれを知っていると思います。)word${parameter-word}

しかし、それ以降は何も指定されておら-ず、何が起こっているのかよくわかりません。これは単にparameternull値を置き換えますか?通常、私はこれを実際の推測として受け入れ、読み続けたいと思います。しかし、言及されたコメントは次のとおりです。次へ追加ファイル拡張子。

答え1

スクリプトにコマンドが含まれていますかset -u?これは意味する

パラメータ拡張時に設定されていない変数と特殊パラメータ「@」、「*」以外のパラメータはエラーとして扱われます。設定されていない変数またはパラメータに対して拡張しようとすると、シェルはエラーメッセージを出力し、対話型でない場合はゼロ以外の状態で終了します。

つまり、$BAR_EXT設定されていない場合は次のようになります。

BAR_FILE="$BAR_FILE$BAR_EXT"

失敗するでしょう。注文する

BAR_EXT=${BAR_EXT-}

$BAR_EXTまったく定義されていない場合は、明示的に空の文字列に設定され、これらのエラーを回避できます。

答え2

${VARIABLE-}VARIABLE設定されている場合は値に展開され、それ以外の場合は空の文字列に展開されます。これは通常異性愛者$VARIABLEがすることです。ただし、オプションを選択するとset -uset -o nounset)on、$VARIABLE変数が設定されていないとエラーが発生しますが、${VARIABLE-}まだ空の文字列を生成します。したがって、${VARIABLE-}「変数が設定されていない場合でも空の文字列を生成したい」を意味し、$VARIABLE「変数を設定しようとしています」を意味または意味することができます。

答え3

最新のBourne Shellのマニュアルページをご覧ください。

http://schillix.sourceforge.net/man/man1/bosh.1.html

現在8ページの「パラメータの置換」セクションを参照してください。 2つのページの下には、すべての可能な拡張を説明する表があります。

Bourne Shellは、パラメータ置換で「-」以上の機能をサポートしています。

関連情報