Câu trả lời ngắn gọn là <
, >
, và các biến thể của họ có quyền ưu tiên cao nhất ràng buộc (chặt chẽ ràng buộc), tiếp theo |
, tiếp theo &&
và ||
, tiếp theo ;
và &
. Vì vậy, chỉ có echo "Thumbnail creation failed"
được dẫn vào tee
.
Một câu trả lời dài hơn một chút sẽ chỉ ra rằng ưu tiên cao nhất thực sự là nhóm, có thể được chỉ định bằng dấu ngoặc đơn hoặc dấu ngoặc nhọn. Ví dụ,
A && (B; C)
và
A && { B; C;}
xấp xỉ tương đương với
if A
then
B
C
fi
Ghi chú:
- Các dấu ngoặc đơn cung cấp cho bạn một subshell; tức là các lệnh
B
và C
chạy trong một tiến trình con. Do đó, các lệnh như gán biến hoặc cd
sẽ không có hiệu lực trên shell cha. Các lệnh trong dấu ngoặc nhọn chạy trong cùng tiến trình với A
lệnh. Do đó, cấu trúc cú đúp A && { B; C;}
là gần gũi hơn với những if
- then
- else
xây dựng.
- Trong cú pháp cú đúp, phải có khoảng trắng sau dấu
{
và ;
(hoặc a &
hoặc dòng mới) trước dấu }
.
Để đọc thêm, hãy xem Toán tử điều khiển và chuyển hướng của shell là gì? và khi nào thì 'nếu' không cần thiết? (đặc biệt là câu trả lời của tôi).
Đối với thậm chí nhiều hơn đọc thêm, xem các bash (1) người đàn ông và
các đặc điểm kỹ thuật POSIX / định nghĩa của Shell Command Language , đặc biệt Mục 2.9, Shell Commands
và Phần 2.10.2, Shell Rules Grammar . Đây là một nỗ lực để cung cấp một số bối cảnh cho ở trên:
là những đường ống của NỮA. Ngữ pháp thiết lập các khối xây dựng và xây dựng dựa trên chúng, như là điển hình cho các ngữ pháp chính thức như thế này (và đối với các ngôn ngữ lập trình như C), do đó, một lệnh đơn giản của riêng lẻ được coi là một đường dẫn đường ống, mặc dù nó không chứa một đường ống. Nó không có ý nghĩa (ngữ nghĩa) cho một phép gán biến là một thành phần của một đường ống, nhưng những thứ như
x=1 | od -ab
hoặc
ls -laR | z=0
có giá trị về mặt cú pháp.
Những thứ nhưđường ống 1 && đường ống 2 | | đường ống 3
được gọi là danh sách của người khác bởi bash và người liệt kê AND-OR liệt kê danh sách của POSIX. Một lần nữa, một đường ống cá nhân khác, hay thậm chí là một lệnh đơn giản riêng lẻ, được coi là một danh sách VÀ VÀ HOẶC, mặc dù nó không chứa AND hoặc OR.
Khi bạn nhận được những thứ nhưDanh sách AND-OR 1 & AND-OR danh sách 2 ; Danh sách VÀ-HOẶC 3
danh pháp bắt đầu có một chút không nhất quán. Bash cũng gọi những danh sách này. POSIX gọi chúng là danh sách của chúng tôi Một lần nữa, một danh sách cá nhân VÀ VÀ HOẶC, một đường dẫn đơn giản, hay thậm chí là một lệnh đơn giản, riêng lẻ, được coi là một danh sách khác, mặc dù nó không chứa a &
hoặc a ;
.
Những thứ như( ghép_list )
và
{ ghép_list ;}
và các lệnh điều khiển luồng ( for
, if
- then
- else
, while
, vv) được gọi là “lệnh hợp chất”.
Trong ví dụ trên, nó có thể làm cho ý nghĩa nhất để giải thích A
, B
và C
là đường ống. Hãy nhớ rằng, một đường ống của người Viking có thể là một lệnh đơn giản cá nhân nó không cần phải chứa một đường ống.
{
...}
nên làm việc. Tôi có thể đã thử nó một cách không hệ thống và không có kết quả như mong đợi.