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

Среднее по месяцам в пределах нескольких диапазонов дат excel
Bash ассоциативный массив перестановка ключей
Соответствие индексу Excel проверка нескольких столбцов
Как выделить границы массива в Excel?
Bash-хранение значения ключа в переменных, объявленных в ассоциативном массиве
Макрос Word: Как заменить строки в тексте на основе таблицы из 2 столбцов?
Создание" временных " формул массива в Excel
Записать импортируемый массив в файл в Bash?
массив ячеек строк в структуре matlab
Как посчитать количество элементов в массиве в Ansible?
Как найти среднее время из массива в PowerShell
Проверить, если элемент в массиве в bash
Подсчет уникальных значений в массиве VBA с пользовательскими функциями
Мне понадобится формула, показывающая количество, итоги и подытоги для набора данных из разных листов
Как использовать условный массив с несколькими условиями для вычисления процентилей?

Bash-хранение значения ключа в переменных, объявленных в ассоциативном массиве

Я пытаюсь создать ассоциативный массив в bash, содержащая имя файла (видео) и его продолжительность. Код :

#!/bin/sh

shopt -s nullglob
movie=(*.mp4)

declare -A MYMAP[$filename]=${duration}

total=${#movie[*]}

for (( i=0; i<=$(( $total -1 )); i++ ))
do

MYMAP[duration]=10
MYMAP[filename]=${movie[i]}
echo "${MYMAP[@]}"
echo "${!MYMAP[@]}"

done

echo "${#MYMAP[@]}"

Я хочу передать имя файла и сохранить его в переменной key, а длительность в переменной value.
Продолжительность фактически будет запрашиваться через ffprobe, но это несущественно на данный момент, потому что значения не передаются в переменные правильно.

результаты :

$ sh test2.sh
test2.sh: line 6: MYMAP[]: bad array subscript
10 File_01.mp4
duration filename
10 File_02.mp4
duration filename
10 File_03.mp4
duration filename
10 File_04.mp4
duration filename
10 File_05.mp4
duration filename
2

продолжительность и имя файла оба, кажется, попасть в значение, и ключ, кажется, просто вывод имен переменных. Также, если я объявлю массив таким образом:

declare -A MYMAP=[$filename]=${duration}

хотя он удаляет предупреждение, он все-таки выводит мусор.

5
задан Rajib
источник

1 ответов

и ассоциативный массив используют строки в качестве индексов для получения значений. Он работает как простой массив, где вы используете строки вместо целых чисел для обращения к содержимому.

# Declare the array
declare -A durations

# Two movies
sw1="ANewHope.mp4"
sw2="EmpireStrikesBack.mp4"

# Store values
durations[$sw1]=3600
durations[$sw2]=7200

# Retrieve values
echo ${durations[$sw1]}
echo ${durations[$sw2]}

# The movies
echo ${!durations[@]}

# The durations
echo ${durations[@]}
0
отвечен xenoid 2018-03-29 13:07:11
источник

Другие вопросы array bash