มองหาส่วน "Array" ในหน้า man (1) bash ฉันไม่พบวิธีที่จะแบ่งอาร์เรย์
ดังนั้นฉันจึงได้ฟังก์ชั่นที่ซับซ้อนมากเกินไปนี้:
#!/bin/bash
# @brief: slice a bash array
# @arg1: output-name
# @arg2: input-name
# @args: seq args
# ----------------------------------------------
function slice() {
local output=$1
local input=$2
shift 2
local indexes=$(seq $*)
local -i i
local tmp=$(for i in $indexes
do echo "$(eval echo \"\${$input[$i]}\")"
done)
local IFS=$'\n'
eval $output="( \$tmp )"
}
ใช้แบบนี้:
$ A=( foo bar "a b c" 42 )
$ slice B A 1 2
$ echo "${B[0]}" # bar
$ echo "${B[1]}" # a b c
มีวิธีที่ดีกว่าในการทำเช่นนี้?
ฉันกำลังค้นหาวิธีตัดส่วนท้ายของอาร์เรย์และกำกับที่นี่ คำตอบคือไม่ได้พบได้ที่นี่และมันจะเป็นที่ซ้ำกันจะทำเช่นนั้นเพราะผมพบคำตอบได้ที่นี่stackoverflow.com/questions/44939747/... แนวคิดพื้นฐานคือเราสามารถมีนิพจน์ทางคณิตศาสตร์เช่น $ {# array [@]} - (2 + 7) ซึ่งคาดว่าความยาวในการสร้าง $ {array: offset: length} ไม่มีคำตอบที่ให้ไว้ที่นี่แสดงให้เห็นว่า
—
Dominic108