2010-07-07 5 views

답변

4

이 같은 배쉬에서 간접를 사용할 수 있습니다

INPUT=10  
OUTPUT_IN=20  
KEYWORD="IN"  
var="OUTPUT_$KEYWORD" 
echo "${!var}" 

그러나, 당신은 아마 당신이 원하는 것을 할 배열이나 다른 방법을 사용해야합니다. BashFAQ/006 :

매개 변수 안에 변수 이름이나 다른 bash 구문을 넣는 것은 일반적으로 좋지 않습니다. 코드와 데이터의 분리를 위반합니다. 그리고 버그, 보안 문제 등에 대한 미끄러운 경사면을 가져옵니다. "올바른 일을 알고 이해하기 때문에"당신이 "옳다"라는 것을 알고있을지라도, 버그는 우리 모두에게 발생하며 지불합니다. 그들이 할 수있는 손상 정도를 최소화하기위한 분리 관행을 존중합니다.

이외에도 코드가 명확하지 않고 불투명합니다.

일반적으로 bash 스크립팅에서는 간접 참조가 필요하지 않습니다. 일반적으로 사람들은 Bash Array에 대해 이해하거나 알지 못하거나 함수와 같은 다른 Bash 기능을 완전히 고려하지 않았을 때이를 해결책으로 생각합니다.

가능한 경우 eval을 사용하지 않아야합니다. BashFAQ/048 :

변수에 셸 명령이 포함되어 있으면 원하는대로 셸에서 해당 명령을 실행할 수 있습니다. 이는 특히 사용자 또는 사용자가 만든 파일과 같이 신뢰할 수없는 출처에서 변수를 읽을 수있을 때 예기치 않은 결과를 초래할 수 있습니다.

배쉬 (4) 당신이 할 수있는 것이다 연관 배열이 있습니다?

array[in]=10 
array[out]=20 
index="out" 
echo "${array[$index]}" 
관련 문제