Dấu hỏi trong lệnh terminal có nghĩa là gì?


Câu trả lời:


15

Chúng được gọi là Ký tự đại diện (mẫu hình cầu)

Ký tự đại diện chuẩn (còn được gọi là mẫu hình cầu) được sử dụng bởi các tiện ích dòng lệnh khác nhau để làm việc với nhiều tệp.
Ký tự đại diện chuẩn được sử dụng bởi gần như bất kỳ lệnh nào (bao gồm mv, cp, rm và nhiều lệnh khác).

  • (question mark)

    điều này có thể đại diện cho bất kỳ nhân vật duy nhất. Nếu bạn đã chỉ định một cái gì đó tại dòng lệnh như "hd?" GNU / Linux sẽ tìm hda, hdb, hdc và mọi chữ cái / số khác giữa az, 0-9.

  • *(asterisk)

    điều này có thể đại diện cho bất kỳ số lượng ký tự (bao gồm 0, nói cách khác, không hoặc nhiều ký tự). Nếu bạn đã chỉ định "cd *" thì nó sẽ sử dụng "cda", "cdrom", "cdrecord" và bất cứ thứ gì bắt đầu với siêu cd cd cũng bao gồm chính cd cd. "m * l" có thể bằng máy nghiền, mull, ml và bất cứ thứ gì bắt đầu bằng m và kết thúc bằng l.

  • [ ] (square brackets)

    chỉ định một phạm vi. Nếu bạn đã làm m [a, o, u] m thì nó có thể trở thành: mam, mum, mẹ nếu bạn đã làm: m [ad] m nó có thể trở thành bất cứ thứ gì bắt đầu và kết thúc với m và có bất kỳ ký tự nào từ giữa. Ví dụ: những thứ này sẽ hoạt động: mam, mbm, mcm, mdm. Loại ký tự đại diện này chỉ định mối quan hệ của người dùng hoặc người dùng (bạn chỉ cần một mối quan hệ phù hợp).

  • { } (curly brackets)

    các thuật ngữ được phân tách bằng dấu phẩy và mỗi thuật ngữ phải là tên của một cái gì đó hoặc ký tự đại diện. Ký tự đại diện này sẽ sao chép bất cứ thứ gì khớp với (các) ký tự đại diện hoặc tên chính xác (một mối quan hệ (hoặc một mối quan hệ), một hoặc khác).


Ví dụ: điều này sẽ hợp lệ:

  • cp { .doc, .pdf} ~

    Điều này sẽ sao chép mọi thứ kết thúc bằng .doc hoặc .pdf vào thư mục chính của người dùng. Lưu ý rằng không gian không được phép sau dấu phẩy (hoặc bất kỳ nơi nào khác).

  • [!]

    Cấu trúc này tương tự như cấu trúc [], ngoại trừ thay vì khớp bất kỳ ký tự nào trong ngoặc, nó sẽ khớp với bất kỳ ký tự nào, miễn là nó không được liệt kê giữa [và]. Đây là một logic KHÔNG. Ví dụ: rm myfile [! 9] sẽ xóa tất cả các tệp myfiles * (ví dụ: myfiles1, myfiles2, v.v.) nhưng sẽ không xóa một tệp có số 9 ở bất kỳ đâu trong tên của nó.

  • \ (backslash)

    được sử dụng như một nhân vật "thoát", tức là để bảo vệ một nhân vật đặc biệt tiếp theo. Do đó, "\ Tìm kiếm dấu gạch chéo ngược. Lưu ý bạn có thể cần sử dụng dấu ngoặc kép và dấu gạch chéo ngược (es).

để biết thêm ví dụ: truy cập trang này


3
Điều đáng nói là apt-get removeyêu cầu tên gói , không phải tên tệp, điều này làm cho việc mở rộng ký tự đại diện bằng vỏ phần lớn trở nên vô dụng. Nếu bạn muốn loại bỏ một loạt các gói bạn cần sử dụng một biểu thức chính quy đầy đủ, được trích dẫn một cách thích hợp để ngăn vỏ cố gắng diễn giải nó như một quả địa cầu (ví dụ apt-get remove 'gnome.*').

4
Standard wildcards are used by nearly any command (including mv, cp, rm and many others).=> SAI. các ký tự đại diện này đang được mở rộng bởi trình bao và những gì lệnh nhận được là kết quả của việc mở rộng (tức là các tệp khớp với mẫu) thay vì mẫu. (nếu không có bất kỳ tệp nào khớp với mẫu thì mẫu đó sẽ được chuyển trực tiếp tới lệnh)
Carlos Campderrós

17

Nói chung, trong Bash, a ?là một mô hình toàn cầu mở rộng thành một ký tự tùy ý.

Ví dụ:

$ echo Hello1 > foo1
$ echo Hello2 > foo2
$ cat foo?
Hello1
Hello2

Nó gần giống với a *, nhưng *mở rộng thành 0 hoặc nhiều ký tự, trong khi đó ?mở rộng thành chính xác một ký tự (tùy ý).

Trong trường hợp đặc biệt của bạn, ?lệnh trong rõ ràng là một lỗi đánh máy.


Vì vậy, nó là vô dụng / không cần thiết trong trường hợp của tôi, phải không?
Ooker

Đúng. Trong thực tế, nó đã được chỉnh sửa từ câu trả lời bạn liên kết đến khi bạn hỏi câu hỏi của bạn. :)
Malte Skoruppa

1
Không thể tin được: -o
Ooker 18/03/2016

1
Ngay cả khi chúng là ký tự đại diện chính xác, việc sử dụng này nên tránh mà không trích dẫn. apt-get hiểu REs, nhưng nếu một tệp được gọi là gnome1tồn tại trong thư mục hiện tại, shell sẽ mở rộng nó trước khi apt-get có bất kỳ cơ hội nhìn thấy nó.
Rmano

@Ooker Bạn sẽ không bao giờ quên nó bây giờ!
chí
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.