readonly: readonly [aAf] [nazwa[=wartość] ...] lub readonly -p Oznaczenie zmiennych powłoki jako niezmiennych. Oznaczenie każdej NAZWY jako tylko do odczytu; wartości tych NAZW nie mogą być zmieniane przez późniejsze podstawienia. Jeśli podano WARTOŚĆ, jest ona przypisywana przed oznaczeniem jako tylko do odczytu. Opcje: -a działanie na zmiennych tablicowych indeksowanych -A działanie na zmiennych tablicowych asocjacyjnych -f działanie na funkcjach powłoki -p wyświetlenie listy wszystkich zmiennych lub funkcji tylko do odczytu, w zależności od tego, czy podano opcję -f Argument `--' wyłącza dalsze przetwarzanie opcji. Stan wyjściowy: Zwracana jest prawda, chyba że podano nieprawidłową opcję lub NAZWĘ.
Podpowiedź
Jeżeli chcesz deklarowac zmienne lokalne tylko do odczytu (np. wewnątrz funkcji) zapoznaj się z poleceniem declare -r.
Polecenie readonly
definiuje zmienną jako tylko do odczytu.
Kod do skopiowania | Wykonanie kodu |
---|---|
readonly foo="test"
bar="test"
echo "zmienna foo: ${foo}"
echo "zmienna bar: ${bar}"
foo="produkcja"
bar="produkcja"
echo "zmienna foo: ${foo}"
echo "zmienna bar: ${bar}"
readonly bar
bar="jednak test"
echo "zmienna foo: ${foo}"
echo "zmienna bar: ${bar}"
|
johny@ThinkPad:~$ readonly foo="test"
johny@ThinkPad:~$ bar="test"
johny@ThinkPad:~$ echo "zmienna foo: ${foo}"
zmienna foo: test
johny@ThinkPad:~$ echo "zmienna bar: ${bar}"
zmienna bar: test
johny@ThinkPad:~$ foo="produkcja"
bash: foo: readonly variable
johny@ThinkPad:~$ bar="produkcja"
johny@ThinkPad:~$ echo "zmienna foo: ${foo}"
zmienna foo: test
johny@ThinkPad:~$ echo "zmienna bar: ${bar}"
zmienna bar: produkcja
johny@ThinkPad:~$ readonly bar
johny@ThinkPad:~$ bar="jednak test"
bash: bar: readonly variable
johny@ThinkPad:~$ echo "zmienna foo: ${foo}"
zmienna foo: test
johny@ThinkPad:~$ echo "zmienna bar: ${bar}"
zmienna bar: produkcja
|
Po nałożeniu na zmienną atrybutu readonly
nie można było już zmienić jej wartości.
Różnica między declare i readonly
johny@ThinkPad:~$ function f() {
> declare -r c=c1
> readonly d=d1
> echo "#function f() => c:_${c}_ --- d:_${d}_"
> }
johny@ThinkPad:~$ # weryfikacja $c i $d nie ustawione
johny@ThinkPad:~$ echo "#main => c:_${c}_ --- d:_${d}_"
#main => c:__ --- d:__
johny@ThinkPad:~$ # wywolanie funkcji
johny@ThinkPad:~$ f
#function f() => c:_c1_ --- d:_d1_
johny@ThinkPad:~$ # zmienna $d dalej ma swoją wartośc pomimo wyjścia z funkcji!
johny@ThinkPad:~$ echo "#main => c:_${c}_ --- d:_${d}_"
#main => c:__ --- d:_d1_