BASH ассоциативные массивы и косвенное расширение [дубликат]

Используя ES2017, вы должны иметь это как объявление функции

async function foo() {
    var response = await $.ajax({url: '...'})
    return response;
}

и выполнить его следующим образом.

(async function() {
    try {
        var result = await foo()
        console.log(result)
    } catch (e) {}
})()

Или синтаксис Promise

foo().then(response => {
    console.log(response)

}).catch(error => {
    console.log(error)

})
2
задан Ulrik 13 December 2014 в 09:26
поделиться

3 ответа

indir_keys() {
    eval "echo \${!$1[@]}"
}

indir_val() {
    eval "echo \${$1[$2]}"
}

fullname()
{
    pointer=$1
    for i in $(indir_keys $pointer)
    do  
        echo "$i $(indir_val $pointer $i)"
    done
}

Дает:

Jack Ketchum
Clive Barker
Stephen King
H.P. Lovecraft
2
ответ дан perreal 28 August 2018 в 12:16
поделиться

Из справочного руководства Bash :

Позиционные параметры временно заменяются при выполнении функции оболочки (см. Функции оболочки ). .

Итак, вы можете сделать это:

fullname()
{
    for first
    do
        echo "$first ${writer[$first]}"
    done
}
fullname "${!writer[@]}"
0
ответ дан chepner 28 August 2018 в 12:16
поделиться

Поскольку Bash 4.3, declare имеет флаг -n для определения ссылок (это слабо эквивалентно ссылкам в C ++). Этот флаг значительно упрощает вашу проблему:

fullname() {
    declare -nl pointer="$1"
    for i in "${!pointer[@]}"
    do
        echo "${pointer[$i]} $i"
    done
}

Будет безопасно, если у вас есть пробелы или смешные символы в ключах вашего хэша (в отличие от принятого ответа).

12
ответ дан gniourf_gniourf 28 August 2018 в 12:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: