2017-09-07 173 views
8

Tôi bắt đầu ra từ ps aux:Tại sao các dấu nháy kép ảnh hưởng đến việc in các câu lệnh echo này trong linux?

current_processes=`ps aux | grep "tempdir" | tail -3` 

và khi tôi echo nó, nó trông như thế này

echo $current_processes 
19984 10089 17784 

và khi tôi echo cộng nháy kép nó, nó trông như thế này:

echo "$current_processes" 
19984 
10089 
17784  

Tại sao nó đặt các dòng mới này khi tôi sử dụng dấu ngoặc kép nhưng không phải trong trường hợp không có dấu ngoặc kép?

Trả lời

3

Hiệu ứng xuất phát từ trình bao. Không có dấu ngoặc kép, shell sẽ thay thế các dòng mới, các tab và dấu cách bằng dấu cách. Bạn có thể tránh sự thay thế này bằng dấu ngoặc kép. Xem phần Word Splitting trong man page của bash(1) để biết thêm chi tiết:

Lời Chia

Vỏ quét các kết quả của việc mở rộng tham số, thay thế lệnh, và mở rộng số học đó đã không xảy ra trong vòng đôi trích dẫn cho tách từ.

Shell xử lý từng ký tự của IFS làm dấu phân cách và chia các kết quả của các mở rộng khác thành các từ trên các ký tự này. Nếu IFS không được đặt hoặc giá trị của nó chính xác, mặc định là thì bất kỳ chuỗi ký tự IFS nào sẽ phân tách các từ. Nếu IFS có giá trị khác với giá trị mặc định, thì các dãy ký tự khoảng trắng sẽ bị bỏ qua ở đầu và cuối của từ , miễn là ký tự khoảng trắng có giá trị IFS (khoảng trắng IFS là ) tính cách). Bất kỳ ký tự nào trong IFS không phải là không gian IFS trắng- , cùng với bất kỳ ký tự khoảng trống IFS lân cận nào, phân định trường . Một chuỗi ký tự khoảng trống IFS cũng được coi là dấu phân cách . Nếu giá trị của IFS là null, không có sự phân tách từ nào xảy ra.

Bạn có thể xem nội dung của IFS với echo "$IFS" | xxd. Nó sẽ hiển thị cho bạn

00000000: 2009 0a0a         ... 

có nghĩa là không gian (0x20), tab (0x09) và dòng mới (0x0a). 0x0a thứ hai xuất phát từ lệnh echo.

Bạn có thể tránh thay này bằng cách thiết lập IFS với chuỗi rỗng:

IFS="" 
echo "$current_processes" 
19984 
10089 
17784 

Nhưng tôi sẽ không đề nghị này.

+0

tôi thấy cảm ơn bạn @macmoonshine! – Hunle

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