Jawaban singkatnya adalah bahwa <
,, >
dan varian mereka memiliki prioritas pengikatan tertinggi (pengikatan terketat), diikuti oleh |
, diikuti oleh &&
dan ||
, diikuti oleh ;
dan &
. Jadi, hanya yang echo "Thumbnail creation failed"
disalurkan ke Internet tee
.
Jawaban yang sedikit lebih panjang akan menunjukkan bahwa prioritas tertinggi sebenarnya adalah pengelompokan, yang dapat ditunjukkan dengan tanda kurung atau kawat gigi. Sebagai contoh,
A && (B; C)
dan
A && { B; C;}
kira-kira setara dengan
if A
then
B
C
fi
Catatan:
- Tanda kurung memberi Anda sebuah subkulit; yaitu, perintah
B
dan C
jalankan dalam proses anak. Oleh karena itu, perintah seperti penugasan variabel atau tidak cd
akan berpengaruh pada shell induk. Perintah di kawat gigi dijalankan dalam proses yang sama dengan A
perintah. Oleh karena itu, konstruk brace A && { B; C;}
lebih dekat dengan if
- then
- else
konstruk.
- Dalam sintaks brace, harus ada spasi setelah
{
dan dan ;
(atau &
, atau baris baru) sebelum }
.
Untuk bacaan lebih lanjut, lihat Apa kontrol dan pengalihan operator shell? dan Kapan 'jika' tidak perlu? (terutama jawaban saya).
Untuk bacaan lebih lanjut, lihat halaman manual bash (1) dan
spesifikasi / definisi POSIX dari Bahasa Perintah Shell , khususnya Bagian 2.9, Perintah Shell
dan Bagian 2.10.2, Aturan Tata Bahasa Shell . Ini adalah upaya untuk memberikan beberapa konteks untuk hal di atas:
adalah "jalur pipa". Tata bahasa membangun blok bangunan dan membangun di atasnya, seperti tipikal untuk tata bahasa formal seperti ini (dan untuk bahasa pemrograman seperti C), sehingga "perintah sederhana" individu dianggap sebagai "pipa", meskipun tidak mengandung sebuah pipa. Tidak masuk akal (semantik) untuk penugasan variabel menjadi komponen pipa, tetapi hal-hal seperti
x=1 | od -ab
atau
ls -laR | z=0
secara sintaksis valid.
Hal-hal sepertipipa 1 && pipa 2 || pipa 3
disebut "daftar" oleh bash dan "AND-OR daftar" oleh POSIX. Sekali lagi, "jalur pipa" individu atau bahkan "perintah sederhana" individu dianggap sebagai "daftar AND-OR", meskipun tidak mengandung AND atau OR.
Ketika Anda sampai pada hal-hal sepertiDAN-ATAU daftar 1 & DAN-ATAU daftar 2 ; DAN-ATAU daftar 3
nomenklaturnya mulai sedikit tidak konsisten. Bash menyebut "daftar" ini juga; POSIX menyebut mereka "daftar", "daftar majemuk" dan (jarang) "istilah". Sekali lagi, "daftar AND-OR" individu, "pipeline" atau bahkan "perintah sederhana" individu dianggap sebagai "daftar", meskipun tidak mengandung a &
atau a ;
.
Hal-hal seperti( compound_list )
dan
{ compound_list ;}
dan perintah aliran-kontrol ( for
, if
- then
- else
, while
, dll) disebut “perintah senyawa”.
Dalam contoh di atas, mungkin yang paling masuk akal untuk menafsirkan A
, B
dan C
menjadi pipa. Ingat, "saluran pipa" dapat berupa "perintah sederhana" individual; tidak perlu mengandung pipa.
{
...}
harus bekerja. Saya mungkin telah mencobanya secara tidak sistematis dan tidak mendapatkan hasil yang diharapkan.