Bạn có thể trích xuất chữ từ một chuỗi (đó là những gì các phần tử mảng là) bằng bộ sửa đổi trong việc mở rộng biến: #
(loại bỏ tiền tố), ##
(loại bỏ tiền tố , tham lam), %
(xóa hậu tố) và %%
(xóa hậu tố, tham lam).
$ myarr=('hello big world!' 'how are you' 'where am I')
$ echo "${myarr[0]}" # Entire first element of the array
hello big world!
$ echo "${myarr[0]##* }" # To get the last word, remove prefix through the last space
world!
$ echo "${myarr[0]%% *}" # To get the first word, remove suffix starting with the first space
hello
$ tmp="${myarr[0]#* }" # The second word is harder; first remove through the first space...
$ echo "${tmp%% *}" # ...then get the first word of what remains
big
$ tmp="${myarr[0]#* * }" # The third word (which might not be the last)? remove through the second space...
$ echo "${tmp%% *}" # ...then the first word again
world!
Như bạn có thể thấy, bạn có thể khá lạ mắt ở đây, nhưng tại một số điểm @ đề nghị của chepner biến nó thành một mảng trở nên dễ dàng hơn nhiều. Ngoài ra, các công thức mà tôi đề xuất để trích xuất từ thứ hai vv là một chút mong manh: nếu bạn sử dụng công thức của tôi để trích xuất từ thứ ba của một chuỗi chỉ có hai từ, cắt đầu tiên sẽ thất bại, và nó sẽ in lên từ đầu tiên (!) thay vì trống. Ngoài ra, nếu bạn có hai dấu cách trong một hàng, điều này sẽ coi nó là một từ có độ dài bằng không với một khoảng trống ở mỗi bên của nó ...
BTW, khi tạo mảng, tôi xem xét nó sạch hơn một chút để sử dụng +=(newelement)
thay vì theo dõi chỉ mục mảng một cách rõ ràng:
myarr=()
while read line, do
myarr+=("$line")
done < lines.txt
Nguồn
2013-03-28 20:33:24
Phần tử mảng là chuỗi - bản sao của các dòng. Chúng không phải là mảng của các từ hay bất cứ thứ gì. Bạn có thể chia phần tử mảng lên nếu muốn, nhưng không có phần tách mảng tự động nào thành các từ. –
vâng, điều đó có ý nghĩa – minerals