Trong một vòng lặp trên một mảng, thêm một phần tử vào mảng


9

Tôi có một vấn đề với vòng lặp for trong bash. Ví dụ: Tôi có một mảng ("etc" "bin" "var"). Và tôi lặp lại trên mảng này. Nhưng trong vòng lặp tôi muốn nối một số giá trị vào mảng. Ví dụ

array=("etc" "bin" "var")
for i in "${array[@]}"
do
echo $i
done

Điều này hiển thị etc bin var(tất nhiên trên các dòng riêng biệt). Và nếu tôi nối thêm sau dođó:

array=("etc" "bin" "var")
for i in "${array[@]}"
do
array+=("sbin")
echo $i
done

Tôi muốn: etc bin var sbin(tất nhiên trên các dòng riêng biệt).

Đây không phải là làm việc. Tôi làm nó như thế nào?


1
Thay đổi điều bạn đang lặp đi lặp lại luôn là một đề xuất rủi ro. Đây thường là thời điểm tốt để lùi lại và xem xét liệu có cách tiếp cận nào khác có thể có ý nghĩa hay không
Eric Renouf

Câu trả lời:


6

sẽ nối "sbin" 3 lần nếu cần, nhưng nó sẽ không lặp lại các "sbin" mới được thêm vào trong cùng một vòng lặp.

Sau ví dụ thứ 2:

echo "${array[@]}"
#=> etc bin var sbin sbin sbin

Vâng, đúng vậy, nhưng tôi cần thêm vào cùng một vòng lặp :)
damekr

Dùng hai forvòng rồi. Đầu tiên xác định bổ sung của bạn, sau đó lặp lại kết quả.
PSkocik

1
Tôi không thấy lý do tại sao bạn muốn nối thêm sbin trong vòng lặp. Áp dụng nó chỉ một lần có ý nghĩa hơn:array+=(sbin); for i in ...
PSkocik

Tôi phải kiểm tra xem một số tệp đang sao chép bởi vòng lặp này có nội dung nào không ..
damekr

5
set etc bin var
while [ "$#" -gt 1 ]
do    [ "$1" = bin ] &&
      set "$@" sbin
      printf %s\\n "$1"
shift;done 

Điều đó sẽ lặp lại trên danh sách của bạn, giải quyết sbinvào cuối danh sách nói một cách có điều kiện và bao gồm sbintrong nội dung lặp lại.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.