给定这个数组:
MY_ARR[0]="./path/path2/name.exe 'word1 word2' 'name1,name2'"
MY_ARR[1]="./path/path2/name.exe 'word1 word2' 'name3,name4,name5'"
MY_ARR[2]=".name.exe 'word1 word2'"
MY_ARR[3]="name.exe"
MY_ARR[4]="./path/path2/name.exe 'word1 word2' 'name1'"
MY_ARR[5]="./path/path2/name.exe 'word1 word2' 'name.exe, name4.exe, name5.exe'"
让我们创建 2 个新数组 MY_FILES 和 MY_PARAMETERS
for MY_ARR_INDEX in ${!MY_ARR[*]} ; do
######
# Set the current file in new array.
MY_FILES[ ${MY_ARR_INDEX} ]=${MY_ARR[ ${MY_ARR_INDEX} ]// *}
######
# Set the current parameters in new array
MY_PARAMETERS[ ${MY_ARR_INDEX} ]=${MY_ARR[ ${MY_ARR_INDEX} ]#* }
######
# Show the user whats happening
# (from here until done is just printing info.)
printf "MY_FILES[ ${MY_ARR_INDEX} ]=\"%s\" ; MY_PARAMETERS[ ${MY_ARR_INDEX} ]=\"%s\"\n" \
\
"${MY_ARR[ ${MY_ARR_INDEX} ]// *}" "${MY_ARR[ ${MY_ARR_INDEX} ]#* }"
done
MY_FILES[ 0 ]="./path/path2/name.exe" ; MY_PARAMETERS[ 0 ]="'word1 word2' 'name1,name2'"
MY_FILES[ 1 ]="./path/path2/name.exe" ; MY_PARAMETERS[ 1 ]="'word1 word2' 'name3,name4,name5'"
MY_FILES[ 2 ]=".name.exe" ; MY_PARAMETERS[ 2 ]=" 'word1 word2'"
MY_FILES[ 3 ]="name.exe" ; MY_PARAMETERS[ 3 ]="name.exe"
MY_FILES[ 4 ]="./path/path2/name.exe" ; MY_PARAMETERS[ 4 ]="'word1 word2' 'name1'"
MY_FILES[ 5 ]="./path/path2/name.exe" ; MY_PARAMETERS[ 5 ]="'word1 word2' 'name.exe, name4.exe, name5.exe'"
如何访问每个文件:
for MY_ARR_INDEX in ${!MY_FILES[*]} ; do
CUR_FILE=${MY_FILES[ ${MY_ARR_INDEX} ] }
echo "# Do something with this file: ${CUR_FILE}"
done
输出:
Do something with this file: ./path/path2/name.exe
Do something with this file: ./path/path2/name.exe
Do something with this file: .name.exe
Do something with this file: name.exe
Do something with this file: ./path/path2/name.exe
Do something with this file: ./path/path2/name.exe
如何访问每个参数:
for MY_ARR_INDEX in ${!MY_PARAMETERS[*]} ; do
CUR_FILE=${MY_FILES[ ${MY_ARR_INDEX} ]}
echo "# Do something with this parameter: ${CUR_FILE}"
done
输出:
Do something with this parameter: ./path/path2/name.exe
Do something with this parameter: ./path/path2/name.exe
Do something with this parameter: .name.exe
Do something with this parameter: name.exe
Do something with this parameter: ./path/path2/name.exe
Do something with this parameter: ./path/path2/name.exe
由于 ${!MY_FILES[ [*]} 导致数组 MY_FILES 的索引 NUMBERS,您也可以使用相同的索引号来访问其他数组。这样,您可以在同一个循环中访问多列数据。像这样:
################
#
# Print each file and matching parameter(s)
#
################
# Set a printf format string so we can print all things nicely.
MY_PRINTF_FORMAT="# %25s %s\n"
################
#
# Print the column headings and use index numbers
#
# to print adjacent array elements.
#
################
(
printf "${MY_PRINTF_FORMAT}" "FILE" "PARAMETERS" "----" "----------"
for MY_ARR_INDEX in ${!MY_FILES[*]} ; do
printf "${MY_PRINTF_FORMAT}" "${MY_FILES[ ${MY_ARR_INDEX} ]}" "${MY_PARAMETERS[ ${MY_ARR_INDEX} ]}"
done
)
输出 :
FILE PARAMETERS
---- ----------
./path/path2/name.exe 'word1 word2' 'name1,name2'
./path/path2/name.exe 'word1 word2' 'name3,name4,name5'
.name.exe 'word1 word2'
name.exe name.exe
./path/path2/name.exe 'word1 word2' 'name1'
./path/path2/name.exe 'word1 word2' 'name.exe, name4.exe, name5.exe'