在bash中按索引访问数组项

时间:2011-09-07 16:16:45

标签: bash

我有以下代码:

PROJECT_TYPES="iPad iPhone"
ANT_TARGET_NAMES="ipadf ipaf"

INDEX=0

for PROJECT_TYPE in $PROJECT_TYPES; do

echo "${PROJECT_TYPE} => ${ANT_TARGET_NAMES[$INDEX]}"

let "INDEX++"
done

显示以下行:

iPad => ipadf ipaf
iPhone =>

如何更改代码以显示:

iPad => ipadf
iPhone =>  ipaf

???

提前致谢

麦克

2 个答案:

答案 0 :(得分:2)

正确的方法是:

INDEX=0
PROJECT_TYPES=(iPad iPhone)
ANT_TARGET_NAMES=(ipadf ipaf)

for PROJECT_TYPE in ${PROJECT_TYPES[*]} 
do 
echo "${PROJECT_TYPE} => ${ANT_TARGET_NAMES[$INDEX]}"  
let "INDEX++" 
done

答案 1 :(得分:1)

bash 4有关联数组,所以你可以写:

declare -A targets=([iPad]=ipadf [iPhone]=ipaf)
for project_type in "${!targets[@]}"; do
  printf "%s => %s\n" "$project_type" "${targets[$project_type]}"
done

否则,按照ennuikiller的回答声明两个数组,但我会直接迭代索引

projects=(iPad iPhone)
targets=(ipadf ipaf)
for (( i=0; i < ${#projects[@]}; i++ )); do
  printf "%s => %s\n" "${projects[$i]}" "${targets[$i]}"
done