2014-12-16 24 views

cevap

3

(veya dolaylı genişleme) atar.

~$ cat s.sh 
var1="test" 
var2="script" 
echo ${!1} 
~$ ./s.sh var1 
test 
~$ ./s.sh var2 
script 

man bash kaynaktan: parametresinin değeri ikame

${parameter}

sözdizimini ${!var} kullanmak gerekir. Parantezler, parametre birden fazla basamaklı bir konumsal parametre olduğunda veya parametrenin ardından, adının bir parçası olarak yorumlanmayacak bir karakter tarafından izlendiğinde gereklidir.

Parametrenin ilk karakteri bir ünlem işareti (!) Ise, değişken bir dolaylılık düzeyi eklenir. Bash, değişkenin adı olarak parametrenin geri kalanından oluşturulan değişkenin değerini kullanır; Bu değişken daha sonra genişletilir ve bu değer, değiştirmenin kalanında, parametrenin kendisinin değeri yerine kullanılır. Bu dolaylı genişleme olarak bilinir. Bunun istisnaları aşağıda açıklanan $ {! Prefix *} ve $ {! Name [@]} uzantılarıdır. Ünlem işareti, dolaylılığı sağlamak için hemen sol köşeyi takip etmelidir.

+2

'$' ve '$' açılımları burada hedefe gerçekten alakalı olmayan {önek *!} ​​{Önek @!}. –

+0

@EtanReisner Gerçekten de… Örneğin, "echo $ {! Var1}" ve "echo $ {! Var1 *}" her ikisi de 'test' yankılanıyordu – fredtantini

+0

'$ {! Prefix *} 'genişletme değişkene genişler adlar değerler değil. Değerleri almak için bu adları dolaylı genişletmelerde kullanabilirsiniz. –

0

Bunu yapabilirsin:

$ foo='bar' 
$ baz='foo' 
$ echo ${!baz} 
bar 
İlgili konular