我目前通过3个炮弹得到2个意见:
$ bash -c 'set bar; set foo${1+ "$@"}; echo "$# $*"'
1 foobar
$ ash -c 'set bar; set foo${1+ "$@"}; echo "$# $*"'
2 foo bar
$ dash -c 'set bar; set foo${1+ "$@"}; echo "$# $*"'
2 foo bar
Run Code Online (Sandbox Code Playgroud)
或者我忽略了一些POSIX定义,它将我的示例呈现为实现定义的行为?
请注意,只有"$ @"似乎会触发差异.以下所有3个shell的工作方式相同:
$ bash -c 'set bar; set foo${1+ $*}; echo "$# $*"'
2 foo bar
$ ash -c 'set bar; set foo${1+ $*}; echo "$# $*"'
2 foo bar
$ dash -c 'set bar; set foo${1+ …Run Code Online (Sandbox Code Playgroud)