Arrays For循环打印两个$value,而不是一个

Arrays For循环打印两个$value,而不是一个,arrays,linux,bash,loops,for-loop,Arrays,Linux,Bash,Loops,For Loop,我对bash数组循环有问题 下面的代码不是单独打印每个值,而是将两个值合并并打印,就像它们是一个一样 #!/bin/bash declare -a array=( 'sf052' 'to060' 'pw' 'qb099' 'pw22' 'wp039' 'wx12' 'wx11' ) for i in "${array[@]}"; do echo $i done 输出: sf052 to060 pw qb099 pw22 wp039 wx12 wx11 预期产出: sf052 to0

我对bash数组循环有问题

下面的代码不是单独打印每个值,而是将两个值合并并打印,就像它们是一个一样

#!/bin/bash

declare -a array=( 'sf052' 'to060' 'pw' 'qb099' 'pw22' 'wp039' 'wx12' 'wx11' )
for i in "${array[@]}"; do
    echo $i
done
输出:

sf052
to060
pw
qb099 pw22
wp039 wx12
wx11
预期产出:

sf052
to060
pw
qb099
pw22
wp039
wx12
wx11
运行
bash--version

GNU bash, version 4.2.45(1)-release (x86_64-pc-linux-gnu)
uname-a

Linux server1 3.11.0-12-generic #19-Ubuntu SMP
Wed Oct 9 16:20:46 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

qb099
pw22
之间的分隔符应为空格字符。 与
wp039
wx12
相同。 要验证这一点,请使用该实用程序

对我来说,输出与预期一致:

0000000   #   !   /   b   i   n   /   b   a   s   h  \n  \n   d   e   c
0000020   l   a   r   e       -   a       a   r   r   a   y   =   (
0000040   '   s   f   0   5   2   '       '   t   o   0   6   0   '
0000060   '   p   w   '       '   q   b   0   9   9   '       '   p   w
0000100   2   2   '       '   w   p   0   3   9   '       '   w   x   1
0000120   2   '       '   w   x   1   1   '       )  \n   f   o   r
0000140   i       i   n       "   $   {   a   r   r   a   y   [   @   ]
0000160   }   "   ;       d   o  \n                   e   c   h   o
0000200   $   i  \n   d   o   n   e  \n
可能对我们大多数人来说,代码是有效的,因为我们从这里复制了它。
但是,如果你从Windows复制粘贴(如Word文档),有时会出现一些特殊字符,而这些字符在视觉上是看不见的。

对我来说效果很好-也许你还有其他问题?在bash 4.2.25-Ubuntu 12.04中对我有效。我猜你可能有打字错误。如果您在Windows环境中创建了脚本并将其移动到Linux环境中,那么您可能已经键入了
'sf052''到060''pw''qb099 pw22''wp039 wx12''wx11'
,而您的问题看起来很清楚,然后尝试
dos2unix脚本文件
。祝你好运。交叉张贴: