ฉันกำลังพยายามสร้างอาเรย์แบบเชื่อมโยงในทุบตีที่มีชื่อไฟล์ (วิดีโอ) และระยะเวลาของมัน รหัสคือ:
#!/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[@]}"
ฉันต้องการส่งชื่อไฟล์และเก็บไว้ในตัวแปรหลักและระยะเวลาในตัวแปรค่า ระยะเวลาจะถูกสอบถามผ่าน 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}
แม้ว่ามันจะเอาการเตือนมันยังคงส่งออกขยะ
declare -A MYMAP
. เส้นMYMAP[duration]=10
กำลังสร้างดัชนีด้วยduration
สตริงไม่มีค่า$duration
, เช่นกันMYMAP[filename]=...
. ตัวแปร$duration
และ$filename
ไม่ได้ประกาศจะมีให้สคริปต์หรือไม่ (แก้ไข - xenoid เอาชนะฉันไปในขณะที่ฉันเขียนช้า)