Có thể thay thế trên thế giới và sau đó bằng ngoặc?


10

Lần đầu tiên tôi học cách viết mã bằng Cngôn ngữ và sử dụng

if ( code )
then 
code
fi

làm cho tôi rất khó đọc mã của mình (đừng hỏi tại sao). Có một sự thay thế cho then?

Một cái gì đó như thế này:

if ( code ) {
 code
}
fi

Các câu trả lời dưới đây có thể giúp ích, nhưng nếu tôi có thể thêm vào, thì nên làm quen với cú pháp của các ngôn ngữ khác nhau. Nếu bạn muốn tìm việc làm trong phát triển phần mềm, hoặc devops hoặc như một sysadmin cho vấn đề đó, bạn sẽ cần phải học cách nhận ra và sử dụng nhiều cú pháp khác nhau. Bạn sẽ có giá trị hơn đối với bất kỳ nhà tuyển dụng nào bằng cách linh hoạt nhất có thể.
OldTimer

Câu trả lời:


21

Không có gì thay thế, nhưng bạn có thể sử dụng cả hai nếu bạn thực sự cần niềng răng:

if true ; then {
    something
} fi

Điều đó sử dụng một nhóm lệnh rõ ràng không cần thiết làm cơ thể của thenkhối. Bất kỳ lệnh nào trong dấu ngoặc nhọn sẽ chỉ được thực thi trong trình bao hiện tại khi thenchạy, chính xác như thể dấu ngoặc không có ở đó.

Tôi thực sự không đề xuất phong cách này nói chung hoặc mã mà người khác sẽ cần đọc, nhưng nó mang lại cho bạn những dấu ngoặc bạn muốn, và nó sẽ thực hiện được mẹo nếu bạn đang sử dụng một trình soạn thảo yêu cầu các khối giằng hoặc một cái gì đó như thế


Đây là một cái khác "không đáng để giới thiệu" - niềng răng galore: { if { [[ a == aa ]];};then { echo yes;};else { echo no;}; fi;}- về cơ bản, khi bạn sử dụng bashđủ, cú pháp tiêu chuẩn trở nên đủ quen thuộc, do đó nó không phải là vấn đề.
Peter.O

15

Bạn dường như được tìm kiếm vỏ C ( csh, tcsh, vv ...). Hãy lưu ý rằng các chuyên gia khuyên bạn nên chống lại nó để lập trình .

Tôi không chắc liệu phần mà bạn cho là không hấp dẫn có phải là thực tế thennằm ở dòng sau không? Nếu vậy, hãy xem xét sử dụng phong cách sau:

if condition; then
    stuff
fi

Tôi phải thừa nhận rằng các tên câu đánh vần ngược như fifor ifesacfor case(nhưng không phải elihwcho while!) Là loại kỳ quặc. Nhưng đó là shell Bourne tiêu chuẩn, cú pháp shell di động nhất mà bạn có thể sử dụng.


Cảm ơn câu trả lời của bạn - Tôi không thấy thenhấp dẫn, chỉ là trình soạn thảo của tôi sẽ làm nổi bật {}các cặp tương ứng và điều đó hữu ích khi tôi gặp một số lỗi vì sau đó tôi có thể dễ dàng xem tất cả các ifphát biểu của mình và xem có gì sai không .
智障 的

1
À đúng rồi. Đó cộng vi's %lệnh mà nhảy đến khớp cú đúp / ngoặc / khung. Tôi thông cảm. Tôi nhớ vi's %lệnh khi lập trình bằng Python.
Celada

8
Bạn đã thử plugin matchit vim chưa? Nó hỗ trợ% jump cho if / fi trong bash và rất nhiều khối khác trong rất nhiều ngôn ngữ khác. Xem tại đây - vim.org/scripts/script.php?script_id=39
amisax

@AmitKumar cảm ơn vì tiền boa. Tôi sẽ có một cái nhìn!
Celada

9

Có lẽ điều này dễ dàng hơn trên mắt:

[ condition ] && {
   # statement 1
   # statment 2
   # ...
}

Khác hơn thế, chỉ cần làm quen với nó. Sử dụng thành ngữ của ngôn ngữ.


1
Nhưng mất đi tính bashism thường không cần thiết và chỉ sử dụng một bộ dấu ngoặc.
Josip Rodin

5

Sau đây là gần đó. Và kỳ lạ.

: if; { code; } && {
    code
}

Cá nhân tôi không bao giờ thích ...

if true; then
more;fi

... hình thành bản thân Tôi thích nó khi các từ kiểm soát dẫn . Nó luôn luôn có vẻ kỳ lạ đối với tôi rằng ...;thenhình thức thịnh hành xuất hiện ở tất cả.

if    this && that
then  do these things too
else  i will probably get upset
fi

Nó gần như hoàn toàn trái ngược với yêu cầu của bạn, nhưng đó là một cách khác để làm điều đó. Bạn cũng có thể giải quyết bất kỳ chuyển hướng mong muốn nào trên fiđường dây khi cần thiết và chúng sẽ áp dụng cho toàn bộ khối.


Hình thức phổ biến này dường như chỉ là một hóa thân phổ biến khác if(...) {, tức là để lại dấu ngoặc mở trên cùng một dòng như iftrong các ngôn ngữ giống như C.
Ruslan

@Ruslan - Có lẽ - nhưng dòng thực sự không tạo ra bất kỳ sự khác biệt nào trong C, phải không?
mikeerv

Phải, nhưng không ngắt dòng tạo ra sự khác biệt trong vỏ, phải không? Dấu chấm phẩy sau điều kiện đã làm cho trình thông dịch tìm kiếm sự tiếp tục của iflệnh, ngay cả khi trên dòng tiếp theo.
Ruslan

@Ruslan - yeah - bạn phải sử dụng ;delim trong trường hợp đó. Đó là lý do tại sao họ làm.
mikeerv

Sử dụng :shell dựng sẵn như thế này, chỉ cần một dòng mã có thể là byte gần với cú pháp C hơn, không nên được khuyến khích theo bất kỳ cách nào.
Josip Rodin

0

Đây là một cách:

[ "$var" = "find" ] && echo "found"

tương đương với:

if [ "$var" = "find" ]; then
  echo "found"
fi

Như anh ta nói trong câu hỏi, anh ta muốn ngoặc . Đặt một số {...}xung quanh echo "found", và sau đó bạn sẽ đi đúng hướng.
Peter.O

-2

Tôi luôn luôn sử dụng:

if (code); then
   code;
fi

Có lẽ không chính xác những gì bạn muốn nhưng nó giống một chút c.


2
Điều đó gây ra một subshell, làm giảm hiệu suất.
Sẽ
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.