2017-07-06 43 views
8

Khi tôi thực hiện lệnh sau, trên bash shell tôi nhận được lỗi nhưng trên vỏ Korn nó chạy hoàn toàn tốt. Sự khác biệt duy nhất là thiếu báo giá duy nhất vào cuối awk, sau}. Bạn có thể giúp tôi hiểu tại sao không?Tại sao ksh cho phép trích dẫn không được ghép nối trong khi bash thì không?

echo `echo "a b c d" | awk '{ print $1 }` 
+6

ksh chỉ là sai về điều này, dấu ngoặc kép phải được ghép nối với xor thoát. –

+0

Nó cũng không có lỗi trong ksh của tôi, (os x). Thật ngạc nhiên! – jas

+6

Lỗi là hành vi đúng, do đó, nó sẽ xuất hiện rằng nó đang chạy hoàn toàn tốt trong bash nhưng không chính xác trong Korn chứ không phải là cách khác xung quanh. –

Trả lời

1

Trong Korn shell, cả hai ve lưng và dấu ngoặc kép có thể được để lại chưa từng có, các tokenizer sẽ cố gắng và đoán nơi một trong hai sẽ kết thúc và kết hợp chúng cho phù hợp.

Ví dụ:

/home/ufierro # echo "`echo ah" 
+ echo ah 
+ echo ah 
ah 

/home/ufierro # echo `echo 'hello world` 
+ echo 'hello world' 
+ echo hello world 
hello world 

Thông báo như thế nào cả hai ví dụ cho thấy một trường hợp khác nhau cho các hành vi nêu trên. Ví dụ đầu tiên cho thấy làm thế nào, một dấu tích đơn trong dấu ngoặc kép đã được hoàn thành trong quá trình phân tích cú pháp và ví dụ thứ hai cho thấy cách một dấu trích dẫn duy nhất bên trong dấu tích được hoàn thành.

+0

Cảm ơn. Tôi đoán rằng nó có thể được cố gắng để đoán nhưng tôi muốn biết tại sao :) Nó sẽ không được dễ bị lỗi hoặc có một số logic cụ thể để nó sẽ không được? – user1578026

+0

Đó là hành vi thực sự cụ thể chỉ xảy ra trong một tập hợp dấu ngoặc kép/dấu tích cụ thể, sẽ khớp với mã thông báo được phân tích cú pháp và cố gắng hoàn thành trích dẫn để ngăn lỗi, xấu xí thực sự nhưng hầu như không dễ xảy ra lỗi trừ khi bạn có ý định tạo lỗi cách này. –

Các vấn đề liên quan