Đối với một mảng có các giá trị tùy ý, nó khá phức tạp bash
vì nó không có toán tử dựng sẵn cho điều đó.
bash
tuy nhiên xảy ra không hỗ trợ lưu trữ các ký tự NUL trong các biến của nó, vì vậy bạn có thể sử dụng điều đó để chuyển điều đó sang các lệnh khác:
Tương đương với zsh
:
new_array=("${(@u}array}")
trên một hệ thống GNU gần đây, có thể là:
eval "new_array=($(
printf "%s\0" "${array[@]}" |
LC_ALL=C sort -zu |
xargs -r0 bash -c 'printf "%q\n" "$@"' sh
))"
Ngoài ra, với các phiên bản gần đây bash
và giả sử không có phần tử mảng nào trống, bạn có thể sử dụng mảng kết hợp:
unset hash
typeset -A hash
for i in "${array[@]}"; do
hash[$i]=
done
new_array=("${!hash[@]}")
Với bash 4.4 trở lên và với GNU sort
:
readarray -td '' new_array < <(
printf '%s\0' "${array[@]}" | LC_ALL=C sort -zu)
Thứ tự của các yếu tố sẽ không giống nhau trong các giải pháp khác nhau.
Với tcsh
:
set -f new_array = ($array:q)
Sẽ giữ lại các f yếu tố IRST ( a b a
=> a b
) như zsh
's (u)
cờ mở rộng.
set -l new_array = ($array:q)
Sẽ giữ lại lần cuối ( a b a
=> b a
). Tuy nhiên, những người loại bỏ các phần tử trống từ mảng.