함수 값을 반품하십시오 배시

나는 내가 원하는 기능을 실행하는 데 사용한 스크립트, 배시 인쇄하려면 반환 값:

function fun1(){
  return 34
}
function fun2(){
  local res=$(fun1)
  echo $res
}

난 '때' fun2 실행하십시오 &quot 인쇄하십시오 34&quot 않습니다;;). 이 경우 이유는?

질문에 대한 의견 (3)
해결책

비록 bash) 는 성명을 통해 '반환' 유일한 것은 function& # 39 의 고유한 종료하십시오 지정할 수 있습니다 ',' 상태 (사이의 값을 0 ',' 0 '와' 255w success&quot 마무리라뇨 ";). 그래서 '반환' 그리웠댔지 않습니다.

'에코' 할 수 있습니다 '-' 기술서임을 너회의 변환하시겠습니까 복귀하십시오 충족되었으며 기술서임을 이쪽요 사용하는 함수가 될 수 있는 '$ ()' 를 사용하여 출력입니다 캡처됩니다 그리웠댔지 당근이지를 어려울 것으로 보인다.

예를 들어보겠습니다.

function fun1(){
  echo 34
}

function fun2(){
  local res=$(fun1)
  echo $res
}

다른 방법은 반환 값 (반품해야 싶은 경우 정수 0-255) 는 '$?'.

function fun1(){
  return 34
}

function fun2(){
  fun1
  local res=$?
  echo $res
}

또한 반환 값을 사용할 수 있는 '은' 만 'like' 불 대수로 fun1 fun2 사용할 경우 '0' 가치 '는' fun1 실행하십시오 fun2 되돌려줍니다. 마지막 값은 가치를 반품해야 기본값입니다 종료하십시오 기술서임을 수행되 함수 내의.

해설 (12)

'$ (.)' 는 명령에 따라 stdout 포함된 텍스트를 보냈다. '리턴' stdout 출력 않습니다. 그 결과 마지막 함장님이요 '코드' 에는 $?

fun1 (){
  return 34
}

fun2 (){
  fun1
  local res=$?
  echo $res
}
해설 (2)

총괄하였습니다 bash 않습니다를 같은 기능을 다른 언어; # 39, re they& 실제로 명령의세. 따라서 함수 사용 또는 스크립트에만 반입됨 이진용으로 경로를 제공하는 것처럼. 정말 좋아하는 프로그램 로직을 관점에서 아무런 차이가 있어야 합니다.

셸 명령은 파이프를 연결하여 아니라 근본적인 사용자정의된 데이터 유형 (lc-fc 스트림까지) 또는 같이 real&quot "; 프로그래밍 언어. 아마 그런 거 없다 같은 명령에 대한 반환 값 때문에, 실제 이 방법은 주로 there& # 39 너희가운데 게 전혀 없다. 이 명령의 맨페이지를 발생할 수 있는 '또는' 도움말에서는 출력입니다 있지만, 모두 그에 따라 기록되지 사람이 읽을 수 있는 경우에만 가능하다.

이 때, 또는 이를 입력 스트림을 명령 싶어 좀 입력입니다 판독합니다 변경분이 인수 목록. 두 경우 모두 할 수 있도록 텍스트 문자열을 분석되었다.

이 회사는 이를 위해 '에코' 그 때 뭔가 반환되기를 출력 스트림을 명령 한다. 영남대 저장입니다 반환 값은 다른 공텐리 운행에서어떠한 전용, 전역 변수. 또한, 일반적으로 더 쓸 수 있기 때문에 더 유연하고 출력물에는 시행하십시오 이진 데이터. 예를 들어, 위치한 쉽게 되돌릴 수 있습니다.

encrypt() {
    gpg -c -o- $1 # encrypt data in filename to stdout (asks for a passphrase)
}

encrypt public.dat > private.dat # write function result to file

다른 사람이 쓴 것으로, 이 명령을 사용할 수 있으며 이 %s/dbase/ext_table. 스레드할 요청자에게 대체 '$ ()' 을 포착하십시오 출력입니다.

이 함수는 평행 &quot return"; 종료 코드 '를 gpg' (GnuPG). # 39 있는 것, 또는 다른 언어 코드를 종료하십시오 보너스로 don& 없는 되었는데, 그 &quot 따라 Schmutzeffekt"; 셸 총괄하였습니다. 이 상태는 정수 또는 성공, 규칙에 따라 0 에 대해 1-255 범위의 something else. 만들기 위해 이 선택해제합니다: '리턴' (like '종료하십시오') 에서 0 이 아닌 값을 취할 수밖에 없는 0-255, 값 때문에 반드시 오류뿐만 종종 선언됨.

39 을 (를) ',' t 명시성 가치를 제공하는 don& 때 복귀하십시오 기술서임을 / 기능 / 명령 (command) 의 상태가 수행됨을 마지막 한 배시 등. 따라서 항상 상태, '그냥' 은 쉽게 복귀하십시오 제공할 수 있습니다.

해설 (2)

이 함수의 반환 '세트', '종료하십시오 기술서임을 종료 코드를 똑같이 할' 은 전체 스크립트입니다.

마지막 명령은 항상 종료 코드를 사용할 수 있는 '$?' 변수.


function fun1(){
  return 34
}

function fun2(){
  local res=$(fun1)
  echo $? # 
해설 (0)

문제는 그들은 여러 가지 기능을 사용할 수 있는 다른 답을 노드전역 때 덮어쓰여집니다 체인, 또는 '에코' 즉 너회의 함수 호출 할 수 있는 진단 정보를 출력입니다 (rec.601 거역한다면 잊어버릴 함수은 높여줍니까, 이 &quot, result&quot, 즉, 반환 값, 더 많은 정보가 포함될 경우 사용 중인 요청자에게 예상, 주요 이상한 버그), 또는 '평가' 가 너무 무겁고 해키.

이를 위해서는 적절한 방법은 함수 및 사용 지역 '을 (를)' 의 최상위 물건을 동일팔레트에 bash& # 39 의 동적 영역 규칙. 예:

func1() 
{
    ret_val=hi
}

func2()
{
    ret_val=bye
}

func3()
{
    local ret_val=nothing
    echo $ret_val
    func1
    echo $ret_val
    func2
    echo $ret_val
}

func3

이 출력입니다

nothing
hi
bye

동적 범위, 즉 '점' ret_val 따라 다른 객체에는 요청자에게! 현재 대부분의 프로그래밍 언어 사용 어휘 영역, 즉 이 다르다. 실제로 이 a 문서화했습니다 피쳐보다, 그냥 쉽게 잘 된다는 게 아니라, 그 다음은 문서용으로 (강조 is mine):

&gt. 해당 기능을 통해 지역 변수를 선언할 수 있다 &gt. 내장. 이 변수는 관리자에게만 표시됩니다 및 함수 &gt. 명령의세 호출합니다.

/ Javascript 배경, 이것은 아마도 C/C++/Python/Java/C 가진 사람을 위한 가장 큰 관문: 이들은 다음과 같은 기능을 bash 명령 및 기능을 하지는 않습니다. 출력할 수 있는 '/' 표준에러출력 ',' stdout 파이프 입 / 출력, 그들은 종료 코드 반환할 수 있습니다. 기본적으로 정의점에 스크립트입니다 실행가능파일 조성하고 차이가 없음을 (command) 에서 호출할 수 있는 명령줄입니다.

그래서 쓰는 대신에 너회의 스크립트입니다 다음과 같습니다.

top-level code 
bunch of functions
more top-level code

쓸 다음과 같습니다.

# define your main, containing all top-level code
main() 
bunch of functions
# call main
main  

여기서 '주 ()' 다 '를' 지역 '와' ret_val 다른 모든 기능을 통해 ret_val 반환 값 ''.

또한 다음과 같은 bsbab-unix &amp. Linix 질문: [유효범위 로컬 변수 쉘로 총괄하였습니다] (https://unix.stackexchange.com/questions/282557/scope-of-local-variables-in-shell-functions).

더 나은 것 중 하나는, 경우에 따라서는 다른 솔루션을 사용하는 지역 - 올린 야스테크 'n'.

해설 (0)

이것은 또 다른 방법은 아키베 [이름 참조입니다] [1] (单捞磐啊 Bash 4.3+).

function example {
  local -n VAR=$1
  VAR=foo
}

example RESULT
echo $RESULT

[1]: https://www.gnu.org/software/bash/manual/bashref.html # 쉘로 매개변수입니다

해설 (1)

내가 좋아하는 일을 할 수 있는 기능은 다음 if 에서 실행 중인 스크립트입니다 정의:

POINTER= # used for function return values

my_function() {
    # do stuff
    POINTER="my_function_return"
}

my_other_function() {
    # do stuff
    POINTER="my_other_function_return"
}

my_function
RESULT="$POINTER"

my_other_function
RESULT="$POINTER"

내가 내 맘에 드는, 그러면 내가 원하는 기능을 포함할 경우 베케이스 에코 명령문입니다.


my_function() {
    echo "-> my_function()"
    # do stuff
    POINTER="my_function_return"
    echo "
해설 (0)

39 others& 표시됨과 추가 기능. # 39 의 역량이 뛰어난 포스트 here& 기사를 이 방법:

  • 글로벌 변수 설정
  • 전역 변수 이름을 가진 함수에 전달된 설정할 수 있습니다
  • set 반환 코드 (및 찾으러 $ 로?)

    39, & # 39 echo& -; 일부 데이터 (pick up with it 및 마이바르 = $ (myfunction))

Bash 의 값을 반환하는 함수

해설 (0)
          • 반환 값을 사용하여 windows*에 어레이에는 깃 (git) 에 대한 여러 배시
  • BASH 번호:*


#!/bin/bash

##A 6-element array used for returning
##values from functions:
declare -a RET_ARR
RET_ARR[0]="A"
RET_ARR[1]="B"
RET_ARR[2]="C"
RET_ARR[3]="D"
RET_ARR[4]="E"
RET_ARR[5]="F"

function FN_MULTIPLE_RETURN_VALUES(){

   ##give the positional arguments/inputs
   ##$1 and $2 some sensible names:
   local out_dex_1="$1" ##output index
   local out_dex_2="$2" ##output index

   ##Echo for debugging:
   echo "running: FN_MULTIPLE_RETURN_VALUES"

   ##Here: Calculate output values:
   local op_var_1="Hello"
   local op_var_2="World"

   ##set the return values:
   RET_ARR[ $out_dex_1 ]=$op_var_1
   RET_ARR[ $out_dex_2 ]=$op_var_2
}

echo "FN_MULTIPLE_RETURN_VALUES EXAMPLES:"
echo "-------------------------------------------"
fn="FN_MULTIPLE_RETURN_VALUES"
out_dex_a=0
out_dex_b=1
eval $fn $out_dex_a $out_dex_b  ##
해설 (0)