Saya sedikit bingung tentang apa yang dilakukan operator-operator ini secara berbeda ketika digunakan di bash (kurung, kurung ganda, kurung dan kurung ganda).
[[ , [ , ( , ((
Saya telah melihat orang menggunakannya pada pernyataan if seperti ini :
if [[condition]]
if [condition]
if ((condition))
if (condition)
Jawaban yang Diterima:
Dalam cangkang mirip Bourne, sebuah if
pernyataan biasanya terlihat seperti
if
command-list1
then
command-list2
else
command-list3
fi
then
klausa dijalankan jika kode keluar dari command-list1
daftar perintah adalah nol. Jika kode keluar bukan nol, maka else
klausa dijalankan. command-list1
bisa
sederhana atau kompleks. Misalnya, dapat berupa urutan dari satu atau lebih pipeline yang dipisahkan oleh salah satu operator ;
, &
, &&
, ||
atau baris baru. if
kondisi yang ditunjukkan di bawah ini hanyalah kasus khusus command-list1
:
-
if [ condition ]
[
adalah nama lain daritest
traditional tradisional memerintah.[
/test
adalah utilitas POSIX standar. Semua shell POSIX memilikinya (meskipun itu tidak diperlukan oleh POSIX²).test
perintah menetapkan kode keluar danif
pernyataan bertindak sesuai. Tes yang umum adalah apakah sebuah file ada atau satu nomor sama dengan yang lain. -
if [[ condition ]]
Ini adalah variasi baru yang ditingkatkan pada
test
dari ksh bash . itu , zsh , yash , busybox dia juga mendukung.[[ ... ]]
This ini konstruksi juga menetapkan kode keluar danif
pernyataan bertindak sesuai. Di antara fitur-fiturnya yang diperluas, ia dapat menguji apakah string cocok dengan pola wildcard (bukan di busybox sh ). -
if ((condition))
ksh Another lainnya ekstensi yang bash dan zsh juga mendukung. Ini melakukan aritmatika. Sebagai hasil aritmatika, kode keluar ditetapkan dan
if
pernyataan bertindak sesuai. Ini mengembalikan kode keluar dari nol (benar) jika hasil perhitungan aritmatika bukan nol. Sukai[[...]]
, formulir ini bukan POSIX dan karenanya tidak portabel. -
if (command)
Ini menjalankan perintah dalam subkulit. Ketika perintah selesai, itu menetapkan kode keluar dan
if
pernyataan bertindak sesuai.Alasan umum untuk menggunakan subkulit seperti ini adalah untuk membatasi efek samping
command
jikacommand
penugasan variabel yang diperlukan atau perubahan lain pada lingkungan shell. Perubahan tersebut tidak tetap ada setelah subkulit selesai. -
if command
perintah dijalankan dan
if
pernyataan bertindak sesuai dengan kode keluarnya.