Dấu chấm phẩy trong cấu trúc có điều kiện


35

Tại sao đặt dấu chấm phẩy trong một mà không phải trong một khác?

Kết quả là như nhau

Mã số một

if [ "a" == "a" ]
then
 echo "true"
fi

Mã hai

if [ "a" == "a" ];
then
 echo "true";
fi

Dấu chấm phẩy trong mã thứ hai là không cần thiết?

Khi nào cần đặt dấu chấm phẩy?


2
Điều này đã được trả lời đầy đủ và đúng đắn, nhưng tôi muốn cho OP cũng biết rằng; chỉ cần thay thế bất kỳ dòng cuối nào , vì vậy bạn có thể kết hợp hai lệnh thành một dòng, ví dụ:svn up; make
Aaron D. Marasco

1
Cũng lưu ý rằng hai dấu chấm phẩy ;;được sử dụng để phân tách các kết quả khớp trong các báo cáo trường hợp. ;;được yêu cầu ở đây, không phải là tùy chọn .... nhưng ;;không giống như ;hoặc ; ;, nó trông hơi giống nó. Các dấu chấm phẩy đơn ;hoạt động như bình thường trong các phần LỆNH của một báo cáo trường hợp.
cas

Câu trả lời:


31

Dấu chấm phẩy chỉ cần thiết khi thiếu dòng cuối:

if [ "a" == "a" ] ; then echo "true" ; fi

Nếu không có dấu chấm phẩy, bạn sẽ gặp lỗi Cú pháp.

Tôi không hiểu câu hỏi của bạn về dấu ngoặc kép. Bạn có thể cụ thể hơn không?

(Và nhân tiện, sử dụng =thay vì ==di động hơn và tuân thủ POSIX).


Báo giá trong mã thứ hai là không cần thiết?
Jhonathan

2
Tất cả các trích dẫn trong cả hai mẫu là không cần thiết.
choroba

6

Dấu chấm phẩy thường được sử dụng, bởi vì một số người (/ tôi ví dụ) thích một kiểu như thế này:

if [ ... ]; then
   doit-it-then
else
   doit-it-else
fi

Vì vậy, nếu từ khóa then được đặt trên dòng điều kiện thì nó không cần thiết vì một lệnh mới bắt đầu, như được viết bởi choroba.

Liên quan đến các trích dẫn trong kiểm tra điều kiện, chúng thường được sử dụng với các biến để đảm bảo không có ngoại lệ xảy ra nếu không có gì được gán cho biến. Đây là một phong cách an toàn hơn và có vẻ không cần thiết, nhưng ngay cả trong lập trình shell, thỉnh thoảng nó cũng xử lý các chương trình mặc dù nội dung không thể được gán cho các biến. Sau đó, lệnh vẫn hoạt động vì một chuỗi rỗng được so sánh.

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.