Làm gì ;; làm gì trong sh?


28

Nếu tôi cố chạy a;;btrong sh, tôi gặp lỗi này:

sh: <number>: Syntax error: ";;" unexpected

Nếu tôi thử a;;;btôi cũng gặp lỗi tương tự, không phải ;;;thay vì ;;vậy, tôi nghĩ đó ;;có nghĩa là gì đó, mặc dù tôi không biết nó có nghĩa gì.

Đây là một ví dụ:

$ echo A;;echo B
sh: 1: Syntax error: ";;" unexpected
$ echo A;;;echo B
sh: 1: Syntax error: ";;" unexpected
$ echo A; ;echo B
sh: 1: Syntax error: ";" unexpected

Ở đây bạn có thể thấy rằng khi tôi sử dụng ; ;thay vì ;;lỗi là khác nhau, liên quan đến thực tế là tôi đã sử dụng ;mà không có lệnh trước đó. ;;dường như là một nhà điều hành khác, mặc dù tôi không biết nó áp dụng cho cái gì.


1
Không thể tìm kiếm trên Google vì ;;và không tìm thấy bản sao ở đây.
EKons

3
Googled "sh double dấu chấm phẩy" ... stackoverflow.com/questions/16905183/
Đổi

@muru Mặc dù chưa đăng ở đây nhưng tôi nghĩ.
EKons

@ ΈρκΚω Đó là những gì SymbolHound dành cho Symbolhound.com
Joe

Câu trả lời:


47

;;phân tách các câu lệnh trong một case... esaccấu trúc trong shell POSIX:

case foo in (a) cmd1; cmd2 ;; (b) cmd3; cmd4; esac

Để tìm hiểu về một lệnh, bạn có thể chạy man that-command. Nếu máy nhắn tin của bạn là less, bạn có thể tìm kiếm trong trang man bằng cách nhấn /.

Tại đây, bạn sẽ chạy man shvà tìm kiếm ;;. Một số shell hỗ trợ các toán tử khác để tách các casecâu lệnh (như ;&trong ksh93/ zsh/ bash/ mksh, &|in zsh/ mksh, ;;&in bash).


1
Tôi chỉ đăng ở đây vì tôi nghĩ rằng dù sao cũng nên có một câu hỏi như vậy, vì ở đây nó có thể được giải thích một cách rõ ràng hơn nếu ai đó bối rối.
EKons

2
Nếu có nhiều lượt truy cập hoặc bạn không thể nhớ các quy tắc thoát khi tìm kiếm less, đôi khi nó rất hữu ích$ man bash|grep -C1 ';;'
unhammer

Bạn không nên có (trước a)b), và bạn cần ;;saucmd4
Barmar

@Barmar, cú pháp đó là POSIX. Trong vỏ Bourne, bạn phải bỏ qua (thực sự, nhưng bạn vẫn không cần ;;trước đó esac(mặc dù nó không gây hại).
Stéphane Chazelas

Cảm ơn. Tôi không biết về sự thay đổi đó trong vỏ POSIX, hoặc cái cuối cùng ;;là tùy chọn.
Barmar
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.