一部のプロセスに進行状況バーを追加するためのシェルスクリプトを読んでいます。ここ)。この行を理解できません(オプション)。
#BAR_EXT=${BAR_EXT-}
コメントは、これが各ファイルに拡張子を追加することを示しています。たぶんもっと読む必要があるかもしれませんが - 演算子の使い方に慣れていません。
私は次の選択肢を知っています。バッシュリファレンスマニュアル:
${parameter:-word}
上記はnull値をparameter
。 (少なくとも私はそれを知っていると思います。)word
${parameter-word}
しかし、それ以降は何も指定されておら-
ず、何が起こっているのかよくわかりません。これは単にparameter
null値を置き換えますか?通常、私はこれを実際の推測として受け入れ、読み続けたいと思います。しかし、言及されたコメントは次のとおりです。次へ追加ファイル拡張子。
答え1
スクリプトにコマンドが含まれていますかset -u
?これは意味する
パラメータ拡張時に設定されていない変数と特殊パラメータ「@」、「*」以外のパラメータはエラーとして扱われます。設定されていない変数またはパラメータに対して拡張しようとすると、シェルはエラーメッセージを出力し、対話型でない場合はゼロ以外の状態で終了します。
つまり、$BAR_EXT
設定されていない場合は次のようになります。
BAR_FILE="$BAR_FILE$BAR_EXT"
失敗するでしょう。注文する
BAR_EXT=${BAR_EXT-}
$BAR_EXT
まったく定義されていない場合は、明示的に空の文字列に設定され、これらのエラーを回避できます。
答え2
${VARIABLE-}
VARIABLE
設定されている場合は値に展開され、それ以外の場合は空の文字列に展開されます。これは通常異性愛者$VARIABLE
がすることです。ただし、オプションを選択するとset -u
(set -o nounset
)on、$VARIABLE
変数が設定されていないとエラーが発生しますが、${VARIABLE-}
まだ空の文字列を生成します。したがって、${VARIABLE-}
「変数が設定されていない場合でも空の文字列を生成したい」を意味し、$VARIABLE
「変数を設定しようとしています」を意味または意味することができます。
答え3
最新のBourne Shellのマニュアルページをご覧ください。
http://schillix.sourceforge.net/man/man1/bosh.1.html
現在8ページの「パラメータの置換」セクションを参照してください。 2つのページの下には、すべての可能な拡張を説明する表があります。
Bourne Shellは、パラメータ置換で「-」以上の機能をサポートしています。