Podczas zastępowania zewnętrznych poleceń w skrypcie powłoki użyłem tablicy, aby pozbyć się awk z NF
.Jak oznaczyć tablicę w POSIX sh?
Teraz, odkąd przeniósł się z sh bash z POSIX, nie mogę dostać tablica oznaczone rację:
#!/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
Używam OpenBSD, sh i ma dokładnie taki sam rozmiar jak ksh. Zmiana powyżej /bin/sh
, wydaje się, że nie działa, co następuje:
set -A "$RANGE"
set -- "$RANGE"
Jak mogę zrealizować powyższy skrypt w /bin/sh
? (Zauważ, że działa dobrze, jeśli wywołujesz bash z --posix
, to nie jest to, czego szukam.)
Na stronie: Nazwy zmiennych typu all-caps są złe. Zobacz konwencje nazw zmiennych środowiskowych na http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap08.html, akapit czwarty, mając na uwadze, że zmienne środowiskowe i zmienne powłoki współdzielą przestrzeń nazw - a więc używają małych liter ponieważ zmienne lokalne zapobiegną przypadkowemu nadpisaniu przez system znaczenia. –