2014-10-13 3 views

답변

0

eval을 사용하여 변수 대체를 "중첩"할 수 있습니다.

f1="filename1"; 
i=1; 
eval c=\${f$i} 
echo $c 
+0

덕분에 –

+1

http://google-styleguide.googlecode.com/svn/trunk/shell.xml 상태에서 eval을 피하도록해야합니다. 이 예제는 안전하지만 사용자 입력에 eval을 사용하지 마십시오. –

+0

POSIX'sh'에서 이것을 지원해야하는 경우가 아니라면 가능한 경우 간접 매개 변수 확장을 위해 쉘의 구문을 사용하십시오. – chepner

3

가변 간접 지정을 사용합니다.

#!/bin/bash 
f1="filename1"; 
i=1; 
c=f$i 
echo ${!c} 

bash (GNU bash, 버전 4.1.2 (1) -release)에서 작동합니다. 나는 다른 포탄에서 시도하지 않았다.

+0

zsh 5.0.7에는 없지만 bash 4.3.30 및 sh 4.3에서도 작동합니다. – jdehesa

+0

고마워. –

+0

@jdehesa'/ bin/sh'가 컴퓨터의'bash '에 대한 링크이기 때문에'sh'에서만 작동한다는 것에 주목하자. '$ {! var}'는'bash' 확장이며 POSIX 쉘에서는 사용할 수 없습니다. 덧붙여서,'zsh'에 해당하는 것은'$ {(P) c}'입니다. – chepner

0

eval과 같이 집중적 인 작업을 피하십시오. 연관 배열을 사용하십시오.

#!/bin/bash 
typeset -A v 
c[f1]=filename1 
i=1 
echo ${c[f$i]} 
관련 문제