- 根据要求
GNU Bash:版本4.4.12(3)-release(x86_64-unknown-cygwin)
Cygwin版本:2.8.2(我认为,或者是最新的)
Windows Server 2012R2
编辑 (要求使用可以验证的实际示例进行更新)
testdir=$(mktemp -t -d testdir.XXXXXX)
cd "$testdir/" && touch file{1..99}
read -r -a ARRAY <<< $(ls -alh "$testdir" | grep -Eo "file[0-9]{2}")
# grep above grep should ignore 0-9 (single digits)
在适当的Linux shell中:echo "${ARRAY[@]}"
返回file10 file11 file12 file13 file14 file15 ..... file99
在适当的Linux shell中:echo "${ARRAY[5]}"
返回:file15
在Cygwin shell中:echo "${ARRAY[@]}"
返回file10
在Cygwin shell中:echo "${ARRAY[5]}"
什么都不返回(没有索引)
for i in "${!ARRAY[@]}"; do echo "Key: $i"; echo "Value: ${ARRAY[$i]}"; done
在适当的Linux Shell中:
Key: 0
Value: file10
...
Key: 89
Value: file99
在Cygwin:
Key: 0
Value: file10
file11
file12
file13
file14
...等
下面的原始问题:
我第一次使用Cygwin,我很难理解为什么我的索引数组会正确填充: 这在适当的Linux shell中运行良好,我已经仔细检查过以确保我不会失去理智: 这得到了很长的结果列表,所有结果都使用唯一键正确索引...无论是错误还是正确,这就是我学会如何做到的,而且它总是对我有用。
当我在Cygwin中执行完全相同的操作时,我只得到一个结果。
如果我declare -a ARRAY
然后ARRAY=$(stuff to do, results populate the array)
我会得到很多结果,但所有结果都存储在一个键下。
我觉得我必须遗漏一些基本的东西,因为我认为不应该这么做。