bash - VAR=${[number]:-default} を使用して変数を定義します。

bash - VAR=${[number]:-default} を使用して変数を定義します。

私は次のスクリプトを見つけました。

VAR1=${1:-8}

VAR2=${2:-4}

私から見ることができるその他の質問そしていくつかのコードを使う

VAR1=${VAR2:-8}

VAR1どんな値VAR2でも生成されます。VAR2設定しない場合、デフォルトVAR1は8で、VAR2未設定のままです。つまり、echo VAR2このコマンドを実行した後は何も返されません。

私の質問は、コードの最初の行が何をしているかです。変数名は数字で始めることができないため、VAR1明らかに1または1という変数に設定されません。ここには理由があるはずですが、ただ少しの無意味な混乱ではないでしょうか?

答え1

${1:-8}sumに使用される変数は${2:-4}位置パラメータ$1sumです$2。コマンドラインからスクリプト(またはシェル関数)に渡された値を保持します。設定されていないか空の場合、前述の変数置換はそれぞれデフォルト値8と4を使用します。

これは、(少なくとも)2つのコマンドライン引数が必要で、何も指定されていない場合は、デフォルト値を提供したいシェルスクリプトまたはシェル関数で使用できます。

スクリプトまたはシェル関数は複数の引数を使用でき、これらの引数はスクリプトまたは関数内で...を使用して$1参照できます。$29以上の位置パラメータ値を取得するには、${10}次のように記述する必要があります。${11}

この場合、別の有用な変数置換は、設定されていない場合はエラーとしてマークされ、スクリプトが${parameter:?word}終了することです。wordparameter

$ cat script.sh
#!/bin/bash
var1="${1:?Must provide command line argument}"
printf 'I got "%s"\n' "$var1"
$ ./script.sh
script.sh: line 3: 1: Must provide command line argument
$ ./script.sh "Hello world."
I got "Hello world."

答え2

位置パラメータを示します$1 ... $n

${1:-default}「パラメータ1が設定されていないか空の場合は使用default」を意味します。

注:${1:-2}と混同しないでください${1: -2}。 bashの場合、後者はの最後の2文字に置き換えられます$1

例:

$ set --
$ echo "${1:-2}"
2

$ set 345 678
$ echo "${1:-2}"
345

$ echo "${1: -2}"
45

関連情報