2013-04-01 2 views
1

에 포함되어이 코드가 더 자연스러운 렌더링하고자하는 배열을 확장은 그 weird_expansion 보조 변수를 사용하는 것이 참으로 이상한 것 같다. Bash에서이 작업을 수행하는 간단한 방법이 있습니까? 위의배쉬는 이름이 함수 매개 변수

출력 :

foo bar baz 
--- 
farkled kark crink 

내가 시도 것들있는 할 하지 일 :

words_to_use=(${${1}[@]}) # error 
words_to_use=(${$1[@]}) # error 
words_to_use=(${!$1[@]}) # error 
words_to_use=(${!1[@]}) # error 
words_to_use=(${!${1}[@]}) # error 
words_to_use=(${${!1}[@]} # error 

만들기, 비교, 초기 부조리 적은 무리 보면 ..

+1

길고도 짧은 이야기, 아니. 그것은 최고의 Bash 전용 non-eval non-nameref 메소드입니다. 실제로'eval'보다 약간 나은 편입니다. 복합 할당에서는 항상 따옴표를 사용하십시오. 'x = ("$ {! y}")'. 이것을 휴대 가능하게하고 싶다면, 일이 훨씬 더 어려워 질 것입니다. '$ {$ {...} '은'eval' 등으로 PE를 생성하지 않는 한 결코 유효하지 않습니다. – ormaaj

답변

0

시험해보기 :

function f() { 
    eval "echo \${$1[@]}" 
} 
+0

'eval'은 "흥미 롭다":'f '1}; $ (mkdir/tmp/a_new_virus_found_a_home)'':(다른 함수에서는 발생하지 않습니다 .. – Robottinosino

0

이 반드시 더 이상 꽤 아니지만, 보조 변수없이 작업을 수행합니다

function f() { 
    local -a words_to_use=($(eval echo \$\{${1}[@]\})) 
    echo ${words_to_use[@]} 
} 
+0

함수 매개 변수에 직접'eval'을주의합니다 .. – Robottinosino

+0

동의하지 않으면, 스크립트 작성자는 함수에 전달되는 것을 완벽하게 제어 할 수 있습니다. –