Apa yang dilakukan ;; lakukan di sh?


28

Jika saya mencoba menjalankan a;;bdi sh, saya mendapatkan kesalahan ini:

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

Jika saya mencoba, a;;;bsaya mendapatkan kesalahan yang sama, bukan ;;;sebaliknya ;;, jadi saya pikir itu ;;berarti sesuatu, walaupun saya tidak tahu apa artinya.

Berikut ini sebuah contoh:

$ 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

Di sini Anda dapat melihat bahwa ketika saya menggunakan ; ;bukan ;;kesalahan berbeda, berkaitan dengan fakta bahwa saya menggunakan ;tanpa perintah sebelumnya. ;;tampaknya menjadi operator yang berbeda, meskipun saya tidak tahu apa itu berlaku.


1
Tidak dapat mencari di Google karena ;;, dan belum menemukan korban penipuan di sini.
EKons

3
Google "sh double semicolon" ... stackoverflow.com/questions/16905183/…
muru

@muru Meskipun belum diposting di sini, saya pikir.
EKons

@ ΈρικΚωνσταντόπουλος Itulah yang SymbolHound adalah untuk symbolhound.com
Joe

Jawaban:


47

;;memisahkan pernyataan dalam case...esac konstruk dalam shell POSIX:

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

Untuk mengetahui tentang suatu perintah, Anda dapat menjalankan man that-command . Jika pager lessAnda, Anda dapat mencari di dalam halaman manual dengan menekan /.

Di sini, Anda akan menjalankan man shdan mencari ;;. Beberapa shell mendukung operator lain untuk memisahkan casepernyataan (seperti ;&di ksh93/ zsh/ bash/ mksh, &|in zsh/ mksh, ;;&in bash).


1
Saya hanya memposting di sini karena saya pikir harus ada pertanyaan seperti itu di sini, karena di sini dapat dijelaskan dengan cara yang lebih jelas jika seseorang bingung.
EKons

2
Jika ada banyak hit, atau Anda tidak dapat mengingat aturan pelarian untuk mencari less, kadang-kadang berguna untuk$ man bash|grep -C1 ';;'
unhammer

Anda seharusnya tidak memiliki (sebelum a)dan b), dan Anda perlu ;;setelahcmd4
Barmar

@Barmar, sintaksnya adalah POSIX. Dalam shell Bourne, Anda harus menghilangkan (memang, tetapi Anda masih tidak membutuhkan ;;sebelumnya esac(meskipun itu tidak membahayakan).
Stéphane Chazelas

Terima kasih. Saya tidak tahu tentang perubahan itu dalam shell POSIX, atau yang terakhir ;;adalah opsional.
Barmar
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.