2011-09-21 7 views
1

전역 변수를 변경하거나 함수를 사용하여 적어도이를 추가하려고합니다.Bash에서 함수 내에서 선언 사용

input="Hello" 
example=input  

func() { 
    declare -x $example="${input} World" 
} 

func 
echo $input 

출력은 "Hello"원래 값입니다. 함수가 원래 값을 변경할 수 있다면 좋겠다. 이것을 달성하기위한 대안이 있습니까? 유의하십시오. example=input을 설정하고 예제 (변수)에서 연산을 수행해야합니다.

나는 대신 eval을 사용하면 함수가 World가 함수인지 아닌지에 대해 불평 할 것입니다.

답변

2

내보내기를 사용해 보셨습니까? 로, 이것은 큰 따옴표는 그 값에 변수를 확장 최초의 구문 분석 ("생존"할 수 있습니다

func() { 
    eval $example=\"${input} World\" 
} 

:

export $example="${input} World" 
+0

그것은 일했습니다, (남자 || 여자들) 당신의 유쾌한! – Anonymous

0

다음과 같은 FUNC()를 재정 의하여 eval을 사용할 수 있습니다 eval이 'input = "Hello World"문자열로 다시 구문 분석을 시작하도록해야한다. 작업을 할 export의 사용에 관해서는

는 변수 입력이 실제로 수출 할 필요가없는 경우, 그 '-n'옵션을 포함한다 :

export -n $example=... 

, 변수 것은 쉘 변수로 남아 환경 변수로 반출되지 않습니다.

+1

신뢰할 수없는 사용자 입력이있는 경우 명령 주입 공격을 시작할 수 있기 때문에 'eval'을 사용하면 대개 frowned가됩니다. – jsears

0

당신은 선언이 쉘 기능에서 실행되는 경우에도, 귀하의 func

-g 옵션을 강제 변수

declare -x -g $example="${input} World" 

만들거나 전역에서 수정 될 수를 사용해야합니다. 다른 모든 경우에는 무시됩니다.

declare-g 옵션을 지원하지 않는 것 같습니다,

http://www.gnu.org/software/bash/manual/bashref.html

는 또한는 MinGW에주의를 참조하십시오.