BASH索引了Cygwin中的数组

时间:2017-08-22 21:46:07

标签: arrays bash cygwin

- 根据要求

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)我会得到很多结果,但所有结果都存储在一个键下。

我觉得我必须遗漏一些基本的东西,因为我认为不应该这么做。

0 个答案:

没有答案