2012-02-28 2 views
0
#!/bin/bash 

ARG_ARRAY=(num1 num2 num3 num4 num5 num6 num7 num8 num9 num10) 
dir=$(find . -type f) 
i=0 

for f in ${dir[@]};do 
     printf "$((++i)) $f  " 
done 

printf "\nPlease select the files:\n" 
echo "Using the numbers like: 1 2 4 5 " 

read ${ARG_ARRAY[@]} 


echo $num1 
echo $num2 
echo $num3 
echo $num4 
echo $num5 
echo $num6 
echo $num7 
echo $num8 
echo $num9 
echo $num10 

for f in ${ARG_ARRAY[@]} 
do 
     var=$f 
     echo ${$var} 
done 

위의 코드는 모든 파일을 표시하려고합니다. usr이 선택하게 한 다음 사용자가 선택한 파일 이름을 인쇄하십시오. 그러나 나는이쉘 선택 목록에 실패했습니다.

for f in ${ARG_ARRAY[@]} 
do 
     var=$f 
     echo ${$var} 
done 


./test.sh: line 30: num1: command not found 

./test.sh: line 30: num2: command not found 

./test.sh: line 30: num3: command not found 

./test.sh: line 30: num4: command not found 

./test.sh: line 30: num5: command not found 

./test.sh: line 30: num6: command not found 

./test.sh: line 30: num7: command not found 

./test.sh: line 30: num8: command not found 

./test.sh: line 30: num9: command not found 

./test.sh: line 30: num10: command not found 

사람이이 문제를 해결하는 데 도움이 수 오류다면이 순서가 성공적으로

echo $num1 
echo $num2 
echo $num3 
echo $num4 
echo $num5 
echo $num6 
echo $num7 
echo $num8 
echo $num9 
echo $num10 

를 인쇄 할 수 있습니다 찾을? 왜 두 번째 방법은 실패합니까?

답변

3

당신은 그 목적을 위해 eval를 사용할 수있는, 예컨대 :

for f in ${ARG_ARRAY[@]} 
do 
    var=$f 
    eval echo \$$var 
done 
관련 문제