Arrays 为什么不是';t bash是否接受数组第一个元素的任何值?

Arrays 为什么不是';t bash是否接受数组第一个元素的任何值?,arrays,bash,Arrays,Bash,显然,bash中的数组对第一个元素有特殊的规则,对此有何解释 jgo ~$ myarray=(-n foo) && echo ${myarray[@]} foo jgo ~$ myarray=(-v foo) && echo ${myarray[@]} -v foo jgo ~$ myarray=(-a foo) && echo ${myarray[@]} -a foo jgo ~$ myarray=(-e foo) && echo

显然,bash中的数组对第一个元素有特殊的规则,对此有何解释

jgo ~$ myarray=(-n foo) && echo ${myarray[@]}
foo
jgo ~$ myarray=(-v foo) && echo ${myarray[@]}
-v foo
jgo ~$ myarray=(-a foo) && echo ${myarray[@]}
-a foo
jgo ~$ myarray=(-e foo) && echo ${myarray[@]}
foo

实际上,您的输出应该更像这样:

jgo ~$ myarray=(-n foo) && echo ${myarray[@]}
foojgo ~$ myarray=(-v foo) && echo ${myarray[@]}
-v foo
jgo ~$ myarray=(-a foo) && echo ${myarray[@]}
-a foo
jgo ~$ myarray=(-e foo) && echo ${myarray[@]}
foo

原因是
-n
-e
echo
的有效选项,而您尝试的其他选项则不是

实际上,您的输出应该更像这样:

jgo ~$ myarray=(-n foo) && echo ${myarray[@]}
foojgo ~$ myarray=(-v foo) && echo ${myarray[@]}
-v foo
jgo ~$ myarray=(-a foo) && echo ${myarray[@]}
-a foo
jgo ~$ myarray=(-e foo) && echo ${myarray[@]}
foo

原因是
-n
-e
echo
的有效选项,而您尝试的其他选项则不是

没错。我注意到,当我在一个合适的linux机器上试用它时,问题中的输出来自cygwin.good one。因此,如果您使用
printf
而不是
echo
,则输出很好。另外,如果您引用数组中的元素,或者只在
$myarray
-->`myarray=(-n foo)和&echo“${myarray[@]}`之前添加空格,如果您仍然要使用echo@Samuel或者,由于没有理由单独展开数组元素,您可以使用
echo“${myarray[*]}”
它将所有内容作为一个单独的参数进行回显。这是正确的。我注意到,当我在一个合适的linux机器上试用它时,问题中的输出来自cygwin.good one。因此,如果您使用
printf
而不是
echo
,则输出很好。另外,如果您引用数组中的元素,或者只在
$myarray
-->`myarray=(-n foo)和&echo“${myarray[@]}`之前添加空格,如果您仍然要使用echo@Samuel或者,由于没有理由单独展开数组元素,您可以使用
echo“${myarray[*]}”
,它将所有元素都作为单个参数进行echo。