process_ls_entry() {
IFS=' ' read -r -a array <<< "$1"
declare -A LS_MAP
LS_MAP[entry]="${array[@]::1}"
LS_MAP[mode]="${array[@]:1:1}"
LS_MAP[size]="${array[@]:2:1}"
LS_MAP[num_blocks]="${array[@]:3:1}"
timestamp="${array[@]:4}"
timestamp=${timestamp// /_}
LS_MAP[timestamp]="${timestamp}"
# how to return?
}
a="temp_dir drwxr-xr-x 0 0 Fri Jul 13 07:08:00 2012"
output=( $(process_ls_entry "$a") )
# entry -> temp_dir
# mode -> drwxr-xr-x
# size -> 0
# size -> 0
# timestamp -> Fri_Jul_13_07:08:00_2012
echo ${output[timestamp]}
我创建了一个函数
如何从shell脚本中的函数正确返回关联数组?
最佳答案
使用可怕的 eval
(如果您可以信任来自 process_ls_entry()
的输出)您可以这样做:
process_ls_entry() {
IFS=' ' read -r -a array <<< "$1"
declare -A LS_MAP
LS_MAP[entry]="${array[@]::1}"
LS_MAP[mode]="${array[@]:1:1}"
LS_MAP[size]="${array[@]:2:1}"
LS_MAP[num_blocks]="${array[@]:3:1}"
timestamp="${array[@]:4}"
timestamp=${timestamp// /_}
LS_MAP[timestamp]="${timestamp}"
# dump LS_MAP in shell reusable format
declare -p LS_MAP
}
然后将其称为:
a="temp_dir drwxr-xr-x 0 0 Fri Jul 13 07:08:00 2012"
tmp=$(process_ls_entry "$a")
# use eval to declare same array with a different name output
eval "${tmp/LS_MAP=/output=}"
echo "${output[timestamp]}"
输出:
Fri_Jul_13_07:08:00_2012
关于bash - 如何从shell中的函数返回关联数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40941671/