나는 내가 원하는 기능을 실행하는 데 사용한 스크립트, 배시 인쇄하려면 반환 값:
function fun1(){
return 34
}
function fun2(){
local res=$(fun1)
echo $res
}
난 '때' fun2 실행하십시오 " 인쇄하십시오 34" 않습니다;;). 이 경우 이유는?
비록 bash) 는 성명을 통해 '반환' 유일한 것은 function& # 39 의 고유한 종료하십시오 지정할 수 있습니다 ',' 상태 (사이의 값을 0 ',' 0 '와' 255w success" 마무리라뇨 ";). 그래서 '반환' 그리웠댔지 않습니다.
'에코' 할 수 있습니다 '-' 기술서임을 너회의 변환하시겠습니까 복귀하십시오 충족되었으며 기술서임을 이쪽요 사용하는 함수가 될 수 있는 '$ ()' 를 사용하여 출력입니다 캡처됩니다 그리웠댔지 당근이지를 어려울 것으로 보인다.
예를 들어보겠습니다.
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 되돌려줍니다. 마지막 값은 가치를 반품해야 기본값입니다 종료하십시오 기술서임을 수행되 함수 내의.
총괄하였습니다 bash 않습니다를 같은 기능을 다른 언어; # 39, re they& 실제로 명령의세. 따라서 함수 사용 또는 스크립트에만 반입됨 이진용으로 경로를 제공하는 것처럼. 정말 좋아하는 프로그램 로직을 관점에서 아무런 차이가 있어야 합니다.
셸 명령은 파이프를 연결하여 아니라 근본적인 사용자정의된 데이터 유형 (lc-fc 스트림까지) 또는 같이 real" "; 프로그래밍 언어. 아마 그런 거 없다 같은 명령에 대한 반환 값 때문에, 실제 이 방법은 주로 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. 스레드할 요청자에게 대체 '$ ()' 을 포착하십시오 출력입니다.
이 함수는 평행 " return"; 종료 코드 '를 gpg' (GnuPG). # 39 있는 것, 또는 다른 언어 코드를 종료하십시오 보너스로 don& 없는 되었는데, 그 " 따라 Schmutzeffekt"; 셸 총괄하였습니다. 이 상태는 정수 또는 성공, 규칙에 따라 0 에 대해 1-255 범위의 something else. 만들기 위해 이 선택해제합니다: '리턴' (like '종료하십시오') 에서 0 이 아닌 값을 취할 수밖에 없는 0-255, 값 때문에 반드시 오류뿐만 종종 선언됨.
이 함수의 반환 '세트', '종료하십시오 기술서임을 종료 코드를 똑같이 할' 은 전체 스크립트입니다.
마지막 명령은 항상 종료 코드를 사용할 수 있는 '$?' 변수.
function fun1(){
return 34
}
function fun2(){
local res=$(fun1)
echo $? # <-- Always echos 0 since the 'local' command passes.
res=$(fun1)
echo $? #<-- Outputs 34
}
문제는 그들은 여러 가지 기능을 사용할 수 있는 다른 답을 노드전역 때 덮어쓰여집니다 체인, 또는 '에코' 즉 너회의 함수 호출 할 수 있는 진단 정보를 출력입니다 (rec.601 거역한다면 잊어버릴 함수은 높여줍니까, 이 ", result", 즉, 반환 값, 더 많은 정보가 포함될 경우 사용 중인 요청자에게 예상, 주요 이상한 버그), 또는 '평가' 가 너무 무겁고 해키.
이를 위해서는 적절한 방법은 함수 및 사용 지역 '을 (를)' 의 최상위 물건을 동일팔레트에 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):
>. 해당 기능을 통해 지역 변수를 선언할 수 있다 >. 내장. 이 변수는 관리자에게만 표시됩니다 및 함수 >. 명령의세 호출합니다.
그래서 쓰는 대신에 너회의 스크립트입니다 다음과 같습니다.
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 &. Linix 질문: [유효범위 로컬 변수 쉘로 총괄하였습니다] (https://unix.stackexchange.com/questions/282557/scope-of-local-variables-in-shell-functions).
더 나은 것 중 하나는, 경우에 따라서는 다른 솔루션을 사용하는 지역 - 올린 야스테크 'n'.
내가 좋아하는 일을 할 수 있는 기능은 다음 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 "<- my_function. $POINTER"
}
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 ##<--Call function
a=${RET_ARR[0]} && echo "RET_ARR[0]: $a "
b=${RET_ARR[1]} && echo "RET_ARR[1]: $b "
echo
##----------------------------------------------##
c="2"
d="3"
FN_MULTIPLE_RETURN_VALUES $c $d ##<--Call function
c_res=${RET_ARR[2]} && echo "RET_ARR[2]: $c_res "
d_res=${RET_ARR[3]} && echo "RET_ARR[3]: $d_res "
echo
##----------------------------------------------##
FN_MULTIPLE_RETURN_VALUES 4 5 ##<---Call function
e=${RET_ARR[4]} && echo "RET_ARR[4]: $e "
f=${RET_ARR[5]} && echo "RET_ARR[5]: $f "
echo
##----------------------------------------------##
read -p "Press Enter To Exit:"
FN_MULTIPLE_RETURN_VALUES EXAMPLES:
-------------------------------------------
running: FN_MULTIPLE_RETURN_VALUES
RET_ARR[0]: Hello
RET_ARR[1]: World
running: FN_MULTIPLE_RETURN_VALUES
RET_ARR[2]: Hello
RET_ARR[3]: World
running: FN_MULTIPLE_RETURN_VALUES
RET_ARR[4]: Hello
RET_ARR[5]: World
Press Enter To Exit: