私は他の人が書いたいくつかのスクリプト(特にRed Hat)を見てきましたが、それらの変数の多くは次の表記法を使用して割り当てられています
VARIABLE1="${VARIABLE1:-some_val}"
>
または他の変数を拡張するVARIABLE2="${VARIABLE2:-`echo $VARIABLE1`}"
値を直接宣言するのではなく、この表記を使用する意味は何ですか(例:VARIABLE1=some_val
)?
この表記法には利点がありますか、それとも防止できる可能性のあるエラーはありますか?
:-
この文脈で特定の意味がありますか?
承認された回答:
この手法では、別の変数が空であるか未定義の場合に、変数に値を割り当てることができます。 注: この「他の変数」は、同じ変数でも別の変数でもかまいません。
抜粋
${parameter:-word}
If parameter is unset or null, the expansion of word is substituted.
Otherwise, the value of parameter is substituted.
注: このフォームも機能します。${parameter-word}
。 Bash内で利用可能なすべての形式のパラメーター拡張の完全なリストを確認したい場合は、BashHackerのwikiの「パラメーター拡張」というタイトルのこのトピックを参照することを強くお勧めします。
例
変数は存在しません
$ echo "$VAR1"
$ VAR1="${VAR1:-default value}"
$ echo "$VAR1"
default value
変数が存在します
$ VAR1="has value"
$ echo "$VAR1"
has value
$ VAR1="${VAR1:-default value}"
$ echo "$VAR1"
has value
同じことは、他の変数を評価するか、表記のデフォルト値の部分でコマンドを実行することによって行うことができます。
$ VAR2="has another value"
$ echo "$VAR2"
has another value
$ echo "$VAR1"
$
$ VAR1="${VAR1:-$VAR2}"
$ echo "$VAR1"
has another value
その他の例
VARX=${VARX-<def. value>}
。
$ echo "${VAR1-0}"
has another value
$ echo "${VAR2-0}"
has another value
$ echo "${VAR3-0}"
0
上記の$VAR1
&$VAR2
文字列「hasanothervalue」ですでに定義されていますが、$VAR3
は未定義だったため、代わりにデフォルト値が使用されました 。
別の例
$ VARX="${VAR3-0}"
$ echo "$VARX"
0
:=
を使用した確認と割り当て 表記
最後に、便利な演算子:=
について説明します。 。これにより、テスト対象の変数が空または未定義の場合にチェックが行われ、値が割り当てられます。
例
$VAR1
に注意してください これで設定されました。演算子:=
1回の操作でテストと割り当てを行いました。
$ unset VAR1
$ echo "$VAR1"
$ echo "${VAR1:=default}"
default
$ echo "$VAR1"
default
ただし、値が前に設定されている場合は、そのままになります。
$ VAR1="some value"
$ echo "${VAR1:=default}"
some value
$ echo "$VAR1"
some value
便利なダンディリファレンステーブル
関連:文字列をttyに入れてコマンドを作成しますか?
参考資料
- パラメータ拡張– Bash Hackers Wiki
- 10.2。パラメータの置換
- バッシュパラメータの拡張