Mảng và vòng trong zsh


9

Tôi đang cố gắng học các vòng lặp và thao tác mảng trong zsh.

Giả sử tôi có hai mảng trong zsh với cùng một số phần tử chưa biết và mỗi phần tử chứa một danh sách các đường dẫn, ví dụ:

LOCAL_ARRAY=($LOCAL_PATH_1 $LOCAL_PATH_2 $LOCAL_PATH_3)
REMOTE_ARRAY=($REMOTE_PATH_1 $REMOTE_PATH_2 $REMOTE_PATH_3)

Tôi muốn lặp lại thông qua cả hai mảng cùng một chỉ mục chung, để tôi có thể làm một cái gì đó như:

cd $LOCAL_PATH_i
hg pull $REMOTE_PATH_i

trong mỗi lần lặp. Làm thế nào tôi có thể làm điều này trong zsh?

Ngoài ra, tôi đã tìm kiếm điều khiển vòng lặp và mảng trong tài liệu zsh nhưng không mấy thành công. Có một hướng dẫn tốt giới thiệu những điều cơ bản của các vòng lặp , mảng , vv trong zsh? Một cái gì đó cho những người có ít kinh nghiệm bash hoặc shell-script nhưng có nền tảng về lập trình?

Câu trả lời:


13

Mục 15.2.1 Các mảng đăng ký của Array Array , Nói rằng các mảng có thể là chỉ mục với [exp](trong đó explà một biểu thức số) và các phần tử bắt đầu ở chỉ mục 1 (0 nếu KSH_ARRAYSđược đặt).

Phần 14.3 Mở rộng tham số của JTC , Nói rằng cú pháp ${#array_name}sẽ mở rộng thành số phần tử của một mảng.

Phần 6.3 Các lệnh phức tạp của bộ phận Cung cấp cú pháp cho một forvòng lặp số (như trong C) :
for (( initExpr ; testExpr ; stepExpr )) do … done.

Đặt tất cả chúng lại với nhau:

for (( i = 1; i <= $#LOCAL_PATH; i++ )) do
    ( # subshell to contain the effect of the chdir
        cd $LOCAL_PATH[i]
        hg pull $REMOTE_PATH[i]
    )
done

Hoặc, nếu bạn đang sử dụng KSH_ARRAYS, thì đây:

for (( i = 0; i < ${#LOCAL_PATH[@]}; i++ )) do
    ( # subshell to contain the effect of the chdir
        cd ${LOCAL_PATH[i]}
        hg pull ${REMOTE_PATH[i]}
    )
done

Việc sử dụng KSH_ARRAYSlàm cho mảng bắt đầu với chỉ số 0, yêu cầu sử dụng dấu ngoặc cho biểu thức mảng và diễn giải $array$array[0](yêu cầu thay đổi biểu thức độ dài mảng). Các thay đổi cú pháp theo yêu cầu KSH_ARRAYcũng sẽ hoạt động mà không có KSH_ARRAY, nhưng bạn vẫn phải điều chỉnh logic cho phạm vi chỉ mục khác nhau (1 đến N so với 0 đến N-1).

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.