Bạn có thể sử dụng split + global (điều gì xảy ra khi bạn để lại một bản mở rộng không được trích dẫn trong ngữ cảnh danh sách). Nó cản trở chúng ta hầu hết thời gian, sẽ thật xấu hổ nếu không sử dụng nó khi chúng ta thực sự cần nó:
IFS=,
set -o noglob
ARR=($VAR) # split+glob with glob disabled, and split using , as delimiter
Đó là một chút ít phức tạp hơn so với việc viết một tệp tạm thời và sau đó gọi readarray
nó như trong readarray <<< "$string"
cách tiếp cận (cũng lưu ý rằng readarray -d
cần một phiên bản rất gần đây bash
).
Lưu ý rằng mặc dù S
trong IFS
(viết tắt của separator ), mà hoạt động theo cách tương tự như readarray
ở chỗ a,,b,
là chia thành "a"
, ""
và "b"
chỉ.
Đối với một toán tử chia tách thực sự, bạn có thể sử dụng zsh
thay thế:
ARR=("${(@s:,:)VAR}")
( @
dấu ngoặc kép và dấu ngoặc kép để giữ nguyên các phần tử rỗng).
"What is the meaning of the latest $ symbol?"