${STR-NEWSTR} is only replaced when STR is NULL
${STR:-NEWSTR} replace when STR is null or if STR is an empty string
All in all,-number, when STR has no content, then replace,: The number just increases the case of an empty string. Note that the result is the value of the expression and does not change the original STR
${STR+NEWSTR} only replace when STR has content
${STR:+NEWSTR} replace when STR is not NULL
To sum up, the + number, when STR has content, is replaced by: The number just increases the case of an empty string.
${STR=NEWSTR}
${STR:=NEWSTR}
The = sign has the same function as the-number, except that he will give the value of the replaced expression to the original Str
${STR?NEWSTR}
${STR:?NEWSTR}
? This means that if STR does not have a value, the NEWSTR is output to a standard error: The number only increases in the case of an empty string.
Variable substitution in the shell