set -- arg arg2
echo ${2+"$1"}
#OUTPUT
arg
shift
echo ${2+"$1"}
#OUTPUT
#there doesn't seem to be anything here
私は一般にその違いはごくわずかであり、注目に値するものではないと思います-用語はしばしば互換的に使用されます。ただし、上記の2つのケースを見ると、最初の例では、の展開の結果として代用さ $1
れ$2
ていることがわかります。拡張できないとすぐに代替はありません。$2
$2
goldilocksは、置換のエーテルの存在について良い点を示しています。シュレディンガーの猫のようなものだと思います。何かを思い出した。この形式のPOSIXで指定されたパラメーター展開についてはよく知らないかもしれませんが、上記の形式とは逆の方法で機能します。
${var:?if $var is unset or null its \
parent shell dies and this message is output to stderr}
時々私は同じ振る舞いをしたいがset
値のために。POSIXは、その動作を正確に指定していません。しかし、1つか2つのトリックで、それは単に管理されます。
N= #N is null
var="any value should fail"
${var:+${N:?we substitute our \$Null var when \$var is expanded}}
#OUTPUT
sh: line 3: N: we substitute our $Null var when $var is expanded
だが:
N= #N is null
var=
${var:+${N:?is never substituted}}
#OUTPUT
#there doesn't seem to be anything here
variable expansion
、command substitution
。あなたの疑問は何ですか?