나는 내 기능을 가지고있다
fun() {
local result
...complex calculations...
echo "$result"
}
물론 다음과 같은 명령 대체를 통해 호출할 수 있습니다.
something="$(fun)"
그러나 그것은 내가 원하는 것이 아닙니다. 불필요하게 포크되어 fun
서브쉘에서 실행되려고 합니다.
$result
포크 없이 사용하고 싶어요 .
간단한 솔루션(에서 전역 변수 설정) 외에 fun()
무엇을 할 수 있나요?
답변1
결과를 반환할 변수 이름을 함수에 지정합니다.
foo () {
declare -n result="$1"
# stuff that sets result
result='Hello world'
}
foo myvar1
foo myvar2
# Will print "Hello world" twice:
echo "$myvar1"
echo "$myvar2"
이 변수 result
는 이름 참조 변수이며 foo
함수 내에서 이에 대한 모든 참조는 이름이 함수의 첫 번째 인수로 제공되는 변수를 참조합니다.
이를 위해서는 bash
버전 4.3 이상이 필요합니다.
답변2
나는 단지 간단한 함수에서 값을 반환하고 호출 직후에 값을 얻기 위해 전역을 사용합니다. 예를 들어 "아웃"
좋다
foo() {
local a='Hello World'
a="${a% *}" # some work
OUT="$a"
}
foo; myVar="$OUT"