Apakah mungkin untuk mengganti "lalu" dengan tanda kurung?


10

Saya pertama kali belajar bagaimana kode dalam Cbahasa, dan menggunakan

if ( code )
then 
code
fi

membuatnya sangat sulit bagi saya untuk membaca kode saya (jangan tanya mengapa). Apakah ada pengganti then?

Sesuatu seperti ini:

if ( code ) {
 code
}
fi

Jawaban di bawah ini mungkin membantu, tetapi jika saya dapat menambahkan, itu ide yang sangat bagus untuk membiasakan diri dengan sintaksis bahasa yang berbeda. Jika Anda ingin mencari pekerjaan dalam pengembangan perangkat lunak, atau devops atau sebagai sysadmin dalam hal ini, Anda perlu belajar untuk mengenali dan menggunakan banyak sintaks yang berbeda. Anda akan lebih berharga bagi perusahaan mana pun dengan menjadi sefleksibel mungkin.
OldTimer

Jawaban:


21

Tidak ada pengganti, tetapi Anda dapat menggunakan keduanya jika Anda benar-benar membutuhkan kawat gigi:

if true ; then {
    something
} fi

Itu menggunakan kelompok perintah yang secara eksplisit di-bracing sebagai bagian dari thenblok. Perintah apa pun di kawat gigi hanya akan dieksekusi di shell saat ini thenberjalan, persis seolah-olah kawat gigi itu tidak ada.

Saya tidak akan benar-benar merekomendasikan gaya ini secara umum atau untuk kode yang perlu dibaca orang lain, tetapi itu memberi Anda kawat gigi yang Anda inginkan, dan itu akan melakukan trik jika Anda menggunakan editor yang memerlukan blok yang diperkuat atau sesuatu seperti itu.


Berikut ini adalah satu lagi yang "tidak layak untuk direkomendasikan" - kawat gigi berlimpah: { if { [[ a == aa ]];};then { echo yes;};else { echo no;}; fi;}- pada dasarnya, ketika Anda menggunakan bashcukup, sintaks standar menjadi cukup akrab, sehingga tidak banyak masalah.
Peter.O

15

Anda tampaknya akan mencari C shell ( csh, tcsh, dll ...). Ketahuilah bahwa para ahli merekomendasikan untuk tidak memprogram .

Saya tidak yakin apakah bagian yang Anda anggap tidak menarik adalah fakta yang thenada di baris berikut? Jika demikian, pertimbangkan untuk menggunakan gaya berikut:

if condition; then
    stuff
fi

Saya harus mengakui bahwa nama-nama pernyataan ejaan mundur seperti fiuntuk ifdan esacuntuk case(tetapi tidak elihwuntuk while!) Agak aneh. Tapi itu shell Bourne standar, sintaksis shell paling portabel yang dapat Anda gunakan.


Terima kasih atas jawaban Anda - Saya tidak menemukan yang thentidak menarik, hanya saja editor saya akan menyorot {}pasangan yang sesuai , dan itu berguna ketika saya memiliki beberapa jenis kesalahan karena dengan begitu saya dapat dengan mudah melihat semua ifpernyataan saya dan melihat apakah ada kesalahan. .
智障 的 人

1
Ah iya. Perintah plus viitu %yang melompat ke kurung / kurung / kurung yang cocok. Saya bersimpati. Aku rindu vi's %perintah ketika pemrograman Python.
Celada

8
Sudahkah Anda mencoba plugin matchit vim? Mendukung lompatan% untuk jika / fi di bash dan banyak blok lain dalam banyak bahasa lain. Lihat di sini - vim.org/scripts/script.php?script_id=39
amisax

@AmitKumar terima kasih atas tipnya. Saya akan lihat!
Celada

9

Mungkin ini lebih mudah di mata:

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

Selain itu, biasakan saja. Gunakan idiom bahasa itu.


1
Tetapi kehilangan bashism yang biasanya tidak perlu dan hanya menggunakan satu set kurung.
Josip Rodin

5

Berikut ini ada di dekat sana. Dan aneh.

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

Saya pribadi tidak pernah menyukai ...

if true; then
more;fi

... membentuk diri saya. Saya suka ketika kata-kata kontrol memimpin . Bagiku selalu terasa aneh bahwa ...;thenbentuk yang sama muncul.

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

Ini hampir sepenuhnya berlawanan dengan permintaan Anda, tetapi itu cara lain untuk melakukannya. Anda juga dapat menangani setiap pengalihan yang diinginkan ke fijalur sesuai kebutuhan dan akan diterapkan ke seluruh blok.


Bentuk yang berlaku ini tampaknya hanyalah inkarnasi umum lainnya if(...) {, yaitu meninggalkan brace pembuka pada baris yang sama seperti ifdalam bahasa C-like.
Ruslan

@Ruslan - Mungkin - tetapi garis sebenarnya tidak membuat perbedaan sama sekali dalam C, bukan?
mikeserv

Benar, tetapi juga tidak melanggar garis membuat perbedaan dalam shell, bukan? Titik koma setelah kondisi sudah membuat penerjemah mencari kelanjutan dari ifperintah, bahkan jika pada baris berikutnya.
Ruslan

@Ruslan - yeah - Anda harus menggunakan ;delim dalam kasus itu. Itu sebabnya mereka melakukannya.
mikeserv

Menggunakan :shell builtin seperti ini, hanya sebaris kode bisa byte-bijaksana lebih dekat ke sintaks C, tidak boleh didorong dengan cara apa pun.
Josip Rodin

0

Ini caranya:

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

setara dengan:

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

Saat dia menyatakan dalam pertanyaan, dia menginginkan tanda kurung . Letakkan beberapa di {...}sekitar echo "found", dan kemudian Anda akan menuju ke arah yang benar.
Peter.O

-2

Saya selalu menggunakan:

if (code); then
   code;
fi

Mungkin tidak persis seperti yang Anda inginkan, tetapi lebih seperti c.


2
Itu menyebabkan subkulit, menurunkan kinerja.
Will
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.