Trong khi thay thế các lệnh bên ngoài trong một kịch bản lệnh shell, tôi đã sử dụng một mảng để loại bỏ awk's NF
.Làm thế nào để đánh dấu một mảng trong POSIX sh?
Bây giờ, kể từ khi tôi chuyển từ bash để POSIX sh, tôi không thể có được mảng đánh dấu đúng:
#!/bin/bash
export RANGE="0 1 4 6 8 16 24 46 53"
RANGE=($RANGE)
echo arrayelements: $((${#RANGE[@]}))
LAST=$((${#RANGE[@]}-1))
echo "Last element(replace NF): ${RANGE[$LAST]}"
# ./foo
arrayelements: 9
Last element(replace NF): 53
Tôi đang sử dụng OpenBSD, sh và nó có kích thước chính xác giống như ksh. Thay đổi ở trên để /bin/sh
, có vẻ như những điều sau đây không làm việc:
set -A "$RANGE"
set -- "$RANGE"
Làm thế nào tôi có thể nhận ra các kịch bản nêu trên trong /bin/sh
? (Lưu ý rằng nó hoạt động tốt nếu bạn gọi bash với --posix
, đó không phải là những gì tôi tìm kiếm.)
Bên cạnh: Tên biến toàn bộ có dạng không hợp lệ. Xem các quy ước về tên biến môi trường tại http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap08.html, đoạn thứ tư, lưu ý rằng các biến môi trường và các biến shell chia sẻ một không gian tên - vì vậy hãy sử dụng các tên chữ thường cho các biến cục bộ của bạn sẽ ngăn việc vô tình ghi đè điều gì đó có ý nghĩa với hệ thống. –