$ {1: 0: 2} có nghĩa là gì trong bối cảnh này?


19

Tôi đang xem xét mã được hiển thị bên dưới và nó sẽ kiểm tra đầu vào nếu các đối số hàng / cột bắt đầu bằng -rhoặc -c. Điều này ${1:0:2}có nghĩa gì trong bối cảnh này?

rowArgName="-r"
colArgName="-c"
if [ "${1:0:2}" != $rowArgName ] && [ "${1:0:2}" != $colArgName ]
then
   echo $correctCmdMsg >&2
   exit 1
fi

7
Bạn nên bao gồm cả vỏ bạn đang sử dụng vào câu hỏi. Mà có lẽ bash.
Raphael AhDR

2
Điều này dường như được thực hiện để phân tích các đối số dòng lệnh. Có lẽ bạn sẽ muốn biết getopthoặc getoptslàm cho cuộc sống của bạn dễ dàng hơn (hoặc cuộc sống của bất cứ ai đã làm điều này).
Carlos Campderrós

Câu trả lời:


31

Đó là mẫu mở rộng chuỗi con (lớp con của mở rộng tham số).

Định dạng là:

${parameter:offset:length}

và lập chỉ mục bắt đầu từ 0.

Giả sử, bạn có một biến foo, sau đó ${foo:0:2}sinh ra hai ký tự đầu tiên (từ vị trí 0 trên 2 tiếp theo).

Thí dụ:

$ foo=spamegg
$ echo "${foo:0:2}"
sp

Trong trường hợp của bạn, số đầu tiên 1, đề cập đến tên biến $1, là đối số đầu tiên được truyền qua dòng lệnh (trong chương trình chính) hoặc đối số đầu tiên được truyền cho hàm.

Vì vậy, trong trường hợp của bạn, "${1:0:2}"sẽ:

  • bắt đầu trích xuất chuỗi con bắt đầu từ chỉ số 0 tức là ký tự đầu tiên

  • và tiếp tục tối đa hai nhân vật tiếp theo

vì vậy sau thao tác bạn sẽ nhận được hai ký tự đầu tiên (được lập chỉ mục là 0 và 1) của chuỗi đầu vào.

Các [ "${1:0:2}" != $rowArgName ][ "${1:0:2}" != $colArgName ]đang kiểm tra nếu subtring sản lượng tương đương với một số chuỗi khác.


1
Về cơ bản, nó đang kiểm tra xem người dùng có cung cấp $ 1 -chay không -r, có lẽ đã được triển khai tốt hơn vớigetopts
Sergiy Kolodyazhnyy

15

Một trích xuất nhỏ từ man bash:

$ {tham số: offset: length}

Mở rộng chuỗi con . Mở rộng tối đa các lengthký tự của giá trị parameterbắt đầu tại ký tự được chỉ định bởi offset. Nếu tham số là @, một mảng được lập chỉ mục được đăng ký bởi @hoặc *hoặc một tên mảng kết hợp, kết quả sẽ khác nhau như được mô tả dưới đây. Nếu lengthbị bỏ qua, mở rộng thành chuỗi con của giá trị parameterbắt đầu tại ký tự được chỉ định bởi offset và kéo dài đến cuối giá trị. lengthoffset là các biểu thức số học (xem ĐÁNH GIÁ ARITHMETIC bên dưới).


5

Đây là một trích xuất chuỗi con đơn giản từ một biến. Biến trong câu hỏi là tham số đầu tiên cho tập lệnh (đó là 1).

Nếu tôi có một biến, FOO, tôi có thể thấy hai ký tự đầu tiên có giá trị của nó với ${FOO:0:2}. Điều tương tự đang được thực hiện trong ví dụ của bạn với đối số đầu tiên.

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.