2014-09-07 36 views
5

a_${v} olarak adlandırmak istiyorum.Değişken adının bir parçası olarak değişkenleri unix olarak kullanmak

örneğin

: v Artık çok a_${v}=Hello # a_2014 o atma değil gerçi eval komutunu kullanarak çalıştı

Merhaba

olmalıdır a_${v}

a_${v}=hI # a_2013 should be Hi 

v=2014 

için bir değişken açıyorum 2013 2014

olabilir bir değer atarken hata oluştu ama

$ v=2013 

$ eval a_${v}=Hi 


$ v=2014 

$ eval a_${v}=Hello 

echo ${a_${v}} 
değişken adının değerini ayıklayamıyorum

çalışmıyor .. :(

ben Bash kullanıyorum ve değişken adı yani dn't değiştirmek istemiyorsanız yapabileceğiniz Bash Başka değeri

+0

Eğer BASH kullanıyor musunuz? – anubhava

+0

@ Pumbaa80 Aldığınız soru (ve cevabı) bash'a özgüdür ve bu soruya taşınabilir, bash olmayan özel bir cevabın olması yararlı olabilir. –

+0

Basit: son satırınızı kaldırın ve bunun yerine şu iki satırı yapın: 'varname = $ (echo" a _ $ {v} ") ve ardından echo $ {! Varname}'. Rica ederim: D Bunu bir cevap olarak ekleyebilirim ama bana izin vermez: / – CommaToast

cevap

1

değer atamak istiyorum aşağıda (son satırında ünlem işareti sözdizimi dikkat edin):

#!/bin/bash 

a_2014='hello 2014' 
year=2014 
varname=a_${year} 
echo ${!varname} 
0

Parametre genişleme özyinelemeli değil, bu nedenle metin ${a_${v}} gerçekten The contents of the variable whose name is 'a_${v}' ve kabuk bu değişken adı geçerli değil şikayet ediyor.

Sen

eval printf '%s\n' "\${a_${v}}" 

sizin kabuk komut okunabilirliği ve yaşatılabilirlik arttırmak gibi eval komutuyla özyinelemeli genişleme, elde edebilirsiniz, bu tür yapıların kullanımını sınırlamak ve uygun yapılarda bunları sarmak gerekir. Örnek için FreeBSD sistemlerinde sağlanan rc.subr'a bakın. Ayrıca Bash 4.3 olarak

0

:

txt="Value of the variable" 

show() { echo "indirect access to $1: ${!1}"; } 

a_2014='value of a_2014' 
echo "$txt \$a_2014: $a_2014" 
show a_2014     # <-------- this -----------------------+ 
           #          | 
prefix=a      #          | 
year=2014      #          | 
string="${prefix}_${year}"  #          | 
echo "\$string: $string"  #          | 
show "$string"   #$string contains a_2014 e.g. the same as ---+ 

echo ===4.3==== 
#declare -n - only in bash 4.3 
#declare -n refvar=${prefix}_${year} 
#or 
declare -n refvar=${string} 

echo "$txt \$refvar: $refvar" 
show refvar 

echo "==assign to refvar==" 
refvar="another hello 2014" 
echo "$txt \$refvar: $refvar" 
echo "$txt \$a_2014: $a_2014" 
show a_2014 
show "$string" #same as above 
show refvar 

baskılar

Value of the variable $a_2014: value of a_2014 
indirect access to a_2014: value of a_2014 
$string: a_2014 
indirect access to a_2014: value of a_2014 
===4.3==== 
Value of the variable $refvar: value of a_2014 
indirect access to refvar: value of a_2014 
==assign to refvar== 
Value of the variable $refvar: another hello 2014 
Value of the variable $a_2014: another hello 2014 
indirect access to a_2014: another hello 2014 
indirect access to a_2014: another hello 2014 
indirect access to refvar: another hello 2014 
İlgili konular