2015-05-21 8 views

Odpowiedz

12

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).

+4

Zauważ, że od 'bash' 4.2," declare -gr "wydaje się być identyczne z' readonly'. – chepner

+1

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

Powiązane problemy