2012-01-11 23 views
6

Tôi muốn lưu trữ một số dòng đầu ra của blkid trong một mảng. Vấn đề là, những dòng đó chứa khoảng trắng và cú pháp mảng lấy những dấu phân tách cho các phần tử mảng đơn, để tôi kết thúc với các dòng tách trong mảng thay vì một dòng tạo thành một phần tử mảng.Lưu trữ đầu ra grep chứa khoảng trắng trong một mảng

Đây là mã tôi hiện đang có: devices=($(sudo blkid | egrep '^/dev/sd[b-z]'))

echo ${devices[*]} mang lại cho tôi kết quả như sau:

/dev/sdb1: LABEL="ARCH_201108" TYPE="udf" 
/dev/sdc1: LABEL="WD" UUID="414ECD7B314A557F" TYPE="ntfs" 

Nhưng echo ${#devices[*]} mang lại cho tôi 7 nhưng insted tôi muốn có 2. Tôi muốn /dev/sdb1: LABEL="ARCH_201108" TYPE="udf" là phần tử đầu tiên trong mảng thiết bị của tôi và /dev/sdc1: LABEL="WD" UUID="414ECD7B314A557F" TYPE="ntfs" là phần tử thứ hai. Làm thế nào tôi có thể đạt được điều đó?

Trả lời

13

Phần tử mảng được chia thành giá trị IFS. Nếu bạn muốn chia nhỏ trên dòng mới, hãy điều chỉnh IFS:

IFS_backup=$IFS 
IFS=$'\n' 
devices=($(sudo blkid | egrep '^/dev/sd[b-z]')) 
IFS=$IFS_backup 
echo ${#devices[@]} 
+0

Thật tuyệt vời ... +1 –

+0

Cảm ơn bạn, đó là exaclty những gì tôi đang tìm kiếm. –

+0

Tôi vui vì những người như bạn tồn tại: cảm ơn bạn vì câu trả lời :) –

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