bash和for循环中的关联数组

时间:2014-08-14 09:15:36

标签: arrays bash

我在bash中给出了我的第一步,并希望创建一个关联数组并迭代它。我的直觉就是这样做:

declare -A FILES=(['SOURCE']='Source/Core/Core.js' ['DIST']='dist/Core.js')

for file in "${!FILES[@]}"; do
    echo $file - $FILES[$file]
done

但输出是:

SOURCE - [SOURCE]
DIST - [DIST]

并没有预期的路径。我错过了什么?和顺便说一句,是declare -A要求吗?

演示:https://ideone.com/iQpjmj

谢谢

1 个答案:

答案 0 :(得分:3)

将您的扩展放在大括号周围。没有它,$FILES$file将分开扩展。

${FILES[$file]}

一个好的做法是将它们放在双引号旁边以防止分词和可能的路径名扩展:

echo "$file - ${FILES[$file]}"

测试:

$ declare -A FILES=(['SOURCE']='Source/Core/Core.js' ['DIST']='dist/Core.js')
$ for file in "${!FILES[@]}"; do echo "$file - ${FILES[$file]}"; done
SOURCE - Source/Core/Core.js
DIST - dist/Core.js