Saya telah menemukan beberapa contoh "esac" yang muncul di akhir pernyataan bash case tetapi saya belum menemukan dokumentasi yang jelas tentang penggunaannya. Halaman manual menggunakannya, dan bahkan memiliki indeks pada kata ( https://www.gnu.org/software/bash/manual/bashref.html#index-esac ), tetapi tidak mendefinisikan penggunaannya. Apakah ini cara yang diperlukan untuk mengakhiri pernyataan kasus, praktik terbaik, atau teknik murni?
55
esac
titik tepat di mana seharusnya - ke garis yang mendefinisikannya dan menggambarkan bahwa itu diperlukan.esac
atau sesuatu seperti itu, bagaimana menurut Anda itu akan dapat mengetahui di mana akhircase
pernyataan itu?case
pernyataan, dengan cara yang sama bahwaelse
,elif
, danfi
didefinisikan sebagai bagian dari sintaks dari suatuif
pernyataan. Itu tidak memiliki semantik sendiri, jadi tidak ada yang bisa dikatakan tentang hal itu, tapi itu pada akhir definisicase
pernyataan, jadi di situlahcase
pernyataan berakhir. Fakta bahwa itucase
dieja terbalik adalah rasa ingin tahu yang nyaman, tetapi komputer tidak peduli, ia hanya tahu bahwa ia sedang mencari kata tertentu.Jawaban:
Seperti
fi
untukif
dandone
untukfor
,esac
adalah cara yang diperlukan untuk mengakhiricase
pernyataan.esac
adalahcase
dieja mundur, bukan sepertifi
yangif
dieja mundur. Saya tidak tahu mengapa token yang mengakhirifor
blok tidakrof
.sumber
od
mengakhirido
blok? :)\od
setiap kali Anda ingin menggunakan utilitas itu! Yang jarang, tapi maksud saya;)fi
dan tidakneht
, jadi dengan analogi akanrof
(atauelihw
) dan tidakod
(juga, tentu saja,od
sudah diambil) ... tapi mungkin ini mengharapkan terlalu banyak konsistensi diri dari salah satu bahasa yang paling tidak konsisten diri ada.Kata
esac
kunci ini memang pembatas yang diperlukan untuk mengakhiricase
pernyataanbash
dan sebagian besar shell yang digunakan di Unix / Linux tidak termasukcsh
keluarga.Shell Bourne asli dibuat oleh Steve Bourne yang sebelumnya bekerja di ALGOL68 . Bahasa ini menemukan teknik kata terbalik ini untuk membatasi blok.
Yang terakhir tidak lebih
do/od
tapido/done
di Bourne dan semua kerang yang berasal termasukbash
karenaod
sudah ada sebagai perintah Unix sejak awal ( o ctal d UMP ).Perhatikan bahwa
do/done
blok fungsional diperkenalkan oleh baikfor
, yangwhile
, atauuntil
instruksi.for
,while
danuntil
tidak perlu diakhiri sebagaimanadone
memadai. Itulah alasan mengapa tidak perlu untuk hipotetisrof
danelihw
token.sumber
"
esac
" Mengakhiri " " sebelumnyacase
untuk membentuk " blok kode ".Dalam Algol68 mereka digunakan, umumnya urutan karakter terbalik dari kata kunci pengantar digunakan untuk mengakhiri enklosur, misalnya
( if ~ then ~ else ~ fi, case ~ in ~ out ~ esac, for ~ while ~ do ~ od ).
Saya akan memanggil mereka "Blok-blok yang Dilindungi" setelah Edsger Dijkstra dan Bahasa Komando yang dijaga .
od
mungkin tidak digunakan di Shell Bourne karena pra-keberadaan perintah "od" Unix .Sejarah:
Gagasan "Guarded Block" tampaknya berasal dari ALGOL 68 misalnya Bahasa Inggris:
Implementasi LGU Algol68 Soviet melakukan hal yang sama: Dalam bahasa Inggris, pernyataan kasus Algol68 yang penuh hormat berbunyi
case ~ in ~ out ~ esac
, dalam Cyrillic ini berbunyiвыб ~ в ~ либо ~ быв
.Kemudian pada tahun 1975, kode-blok Algol68 dipinjam oleh Edsger Dijkstra untuk Bahasa Perintah yang dijaga . misalnya
Agaknya Dijstra digunakan "Dijaga Blok" untuk mengatasi Menggantung lain ambiguitas dilaksanakan di Algol60 dan kemudian kembali direkayasa dalam Pemrograman C Bahasa . (lih. shift-kurangi konflik. )
Akhirnya - dari Algol68 - "
esac
" berhasil masuk ke cangkang Bourne 1977 (tempat Anda menemukanesac
) milik Stephen R. Bourne yang telah mengembangkan kompiler Algol68 awal yang disebut ALGOL 68C .Stephen yang terkenal juga menggunakan Blok yang dijaga yang sama ini dalam "file header C" yang disebut macro.h
Jenius perangkat lunak terkenal Landon Curt Noll dan Larry Bassel menemukan kode makro.h Steve pada tahun 1984 ketika dipekerjakan di kelompok porting Genix National Semiconductor dan berjuang untuk memahami penerapannya. Maka Landon & Larry kemudian menciptakan Kontes Kode C Internasional yang Dikaburkan ...
Dari 1984 hingga hari ini telah ada beberapa ribu bahasa pemrograman "lebih baik" lainnya yang tidak menggunakan Perintah Dijkstra's Guarded. Dan penggunaannya oleh Steven Bourne
macro.h
sekarang sering dikutip dalam "Disertasi Pengembangan Perangkat Lunak" dari mahasiswa IT sebagai bukti bahwa mereka tidak tidur dalam kuliah. :-)sumber
case out
? tidak pernah melihat sintaks ituod
bahkan jika belum diambil? Bukankah begiturof
atau tidakelihw
?do ~ od
,if ~ fi
dan secaracase ~ esac
sederhana berarti bahwa generasi yang akan datang dari undergrads yang tak ada habisnya akan dapat merenungkan Algol68 dan menambahkan "kritik" sederhana Algol68 ke dalam proyek tahun terakhir mereka, tanpa harus benar-benar menulis lebih dari satu halaman (baris?) Kode Algol68.Ya, itu wajib. Seperti yang ditunjukkan Yakub di atas, logikanya sama dengan
if
/fi
. Pembatas komentar C tradisional/*
dan*/
pasangan juga sama. Karena C ditulis sehingga Unix dapat ditulis sebagian besar dalam C, dengan kode perakitan minimum, dengan tumpang tindih besar antara tim pengembangan C dan Unix, masuk akal untuk mengasumsikan sumber umum dari anggapan bahwa persamaan penutup multi pembatas blok-karakter harus urutan karakter yang sama dalam urutan terbalik.Sebaliknya, loop seperti
for
,,while
danuntil
menggunakando
...done
alih-alih membalik urutan karakter, jadi ada beberapa ketidakkonsistenan.sumber