这个问题与这个问题类似,但有所不同:
考虑这个带有可能包含空格的字符串元素的数组:
a@W:$ arr=("eins" "zwei" "eins plus zwei" "vier" "fünf")
a@W:$ echo ${#arr[@]} # ok, 5 elements, as expected
5
a@W:$ echo ${arr[3]} # the fourth one, indexing starts at 0
vier
a@W:$ echo ${arr[2]} # the third one, which contains two blancs
eins plus zwei
a@W:$ ar2=${arr[@]:0:3} # I only want the firs three of them
a@W:$ echo ${ar2[@]}
eins zwei eins plus zwei
a@W:$ echo ${#ar2[@]} # but they are all glued together into one element
1
a@W:$
我必须做什么才能防止将它们全部粘在一起?包含空格的字符串“eins plus zwei”应保留为第三个元素。
您正在将数组切片分配给非数组变量,因此您将获得一个字符串。如果您改为分配给数组,并将其括起来以防止 split+glob,它将按预期工作:
您甚至可以通过以下方式实时观看这一过程
set -x
:如您所见,的扩展
${arr[@]:0:3}
只是一个字符串,它被分配给作为单引号字符串传递的变量。如果您希望将其拆分为数组,则需要对其进行相应的处理: