W bash, jaka jest różnica w declare -r
i readonly
?Jaka jest różnica w wyrażeniach -r` i `readonly` w bash?
$ declare -r a=a1
$ readonly b=b1
Nie jestem pewien, który wybrać.
W bash, jaka jest różnica w declare -r
i readonly
?Jaka jest różnica w wyrażeniach -r` i `readonly` w bash?
$ declare -r a=a1
$ readonly b=b1
Nie jestem pewien, który wybrać.
Odpowiedź: Zakres
Na pierwszy rzut oka nie ma różnicy.
Badanie za pomocą declare -p
$ declare -r a=a1
$ readonly b=b1
$ declare -p a b
declare -r a="a1"
declare -r b="b1"
Jednak zakres jest różny
$ function f() {
declare -r c=c1
readonly d=d1
echo "f:" c $c d $d
}
$ echo c $c d $d
c d
# verify $c $d not set
$ f
f: c c1 d d1
# prints as expected
$ echo c $c d $d
c d d1
# $d still has a value!
Więc jedna różnica jest readonly
uczyni zasięg zmiennych globalny. declare
zmienia zakres lokalny (który jest oczekiwany).
Uwaga: dodanie -g
flagę rachunku declare
(np declare -rg a="a1"
) sprawia, że zasięg zmiennych globalny. (dzięki @chepner).
Zauważ, że od 'bash' 4.2," declare -gr "wydaje się być identyczne z' readonly'. – chepner
Wygląda na to, że nie ma różnicy między 'readonly' a' declare -r'. "declare" wewnątrz funkcji zawsze tworzy zmienne lokalne, chyba że podano flagę '-g'. – codeforester