2015-05-21 19 views

cevap

12

Cevap: İlk bakışta Kapsam

, hiçbir fark.

declare -p

$ declare -r a=a1 
$ readonly b=b1 
$ declare -p a b 
declare -r a="a1" 
declare -r b="b1" 

kullanarak incelenmesi Ama, kapsam

$ 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! 

Yani bir fark Değişken Kapsamı küresel yapacak readonly olduğunu farklıdır. declare, yerel değişken kapsamını değiştirir (beklenen).

Not: declare deyimi (örneğin declare -rg a="a1") için -g işaretini ekleyerek Değişken Kapsamı küresel yapar. (teşekkürler @chepner).

+4

'bash' 4.2'den itibaren' declare -gr' 'readonly' ile aynı görünmektedir. – chepner

+1

'readonly' ile declare -r' arasında bir fark olmadığı anlaşılıyor. '-g' bayrağı belirtilmemişse, bir işlev içinde 'bildirme' her zaman yerel değişkenler oluşturabilir. – codeforester

İlgili konular