tôi muốn làm một cái gì đó như thế này:Looping trên mảng, in cả hai chỉ số và giá trị so
foo=()
foo[0]="bar"
foo[35]="baz"
for((i=0;i<${#foo[@]};i++))
do
echo "$i: ${foo[$i]}"
done
# Output:
# 0: bar
# 1:
Sau đó, tôi đã cố gắng để lặp qua nó sử dụng tại:
foo=()
foo[0]="bar"
foo[35]="baz"
for i in ${foo[@]}
do
echo "?: $i"
done
# Output:
# ?: bar
# ?: naz
nhưng ở đây tôi don' t biết giá trị chỉ mục.
Tôi biết bạn có thể cái gì đó như
foo=()
foo[0]="bar"
foo[35]="baz"
declare -p foo
# Output:
# declare -a foo='([0]="bar" [35]="baz")'
nhưng, bạn không thể làm điều đó theo cách khác?
Lưu ý quan trọng, trong khi iterable, một không gian tách biệt danh sách các từ là _not_ một mảng. Bọc nó như vậy '(a b c)' để chuyển đổi nó thành một mảng. – Breedly
Việc sử dụng dấu ngoặc kép '[@]' và dấu ngoặc kép có nghĩa là nó không phải là "danh sách các từ được phân cách bằng dấu cách". Bạn nhận danh sách các khóa mảng thực, ngay cả khi các khóa riêng lẻ chứa khoảng trắng. –
@glennjackman bạn có thể giải thích điều này hơn 'Việc sử dụng [@] và dấu ngoặc kép có nghĩa là nó không phải là" danh sách các từ được phân tách bằng dấu cách "' –