Bash 함수의 값을 반환합니다.
bash 스크립트를 사용하고 있는데 반환값을 인쇄하는 함수를 실행하고 싶습니다.
function fun1(){
return 34
}
function fun2(){
local res=$(fun1)
echo $res
}
★★★★★★★★★★★★★★를 실행했을 때,fun2 '34', '34'는안 요.왜왜??
가 Bash를 return그인 「기능」의 「기능」의 「기능」의 이 됩니다.exit 「」( 「」) 사이의 값)0 ★★★★★★★★★★★★★★★★★」255은 '성공을 의미함), 0은 '성공을 의미함, 0은 '성공'을 의미함). ★★★★★★★★★★★★★★★★★.return네가 원하는 게 아니야
도 이렇게 쓰는 게 것 같아요.return의 echo- 할 수 .$()교정기, 네가 원하는 게 바로 그거인 것 같아.
다음은 예를 제시하겠습니다.
function fun1(){
echo 34
}
function fun2(){
local res=$(fun1)
echo $res
}
0을 또 다른 은 반환값이다(정수 0~255).$?.
function fun1(){
return 34
}
function fun2(){
fun1
local res=$?
echo $res
}
로직(예: 부울 로직)을.fun1 || fun2은 「」만 .fun2fun1이 아닌 non-time이 됩니다.0value 입니다. 기본 반환값은 함수 내에서 마지막으로 실행된 문의 종료 값입니다.
Bash의 함수는 다른 언어의 함수가 아니라 명령어입니다.따라서 함수는 경로에서 가져온 이진 또는 스크립트인 것처럼 사용됩니다.프로그램 로직의 관점에서 보면, 실제로는 차이가 없습니다.
셸 명령은 "실제" 프로그래밍 언어처럼 기본 또는 사용자 정의 데이터 유형이 아닌 파이프(일명 스트림)로 연결됩니다.을 사용법대부분은 명령어를 선언하는 실제 방법이 없기 때문입니다.에서도, man-page에서도, man-page에서도, man-page에서도, man-page에서도 수 있습니다--help명령어의 출력이지만 둘 다 사람이 조작한 것이기 때문에 바람에 의해 쓰여집니다.
명령어가 입력을 가져오면 명령어는 입력 스트림 또는 인수 목록에서 해당 명령을 읽습니다.두 경우 모두 텍스트 문자열을 구문 분석해야 합니다.
가 무언가를가 반환해야 .echo출력 스트림으로 이동합니다.자주 사용하는 또 다른 방법은 반환값을 전용 글로벌 변수에 저장하는 것입니다.출력 스트림에 쓰는 것은 바이너리 데이터도 사용할 수 있기 때문에 보다 명확하고 유연합니다.예를 들어 BLOB를 쉽게 반환할 수 있습니다.
encrypt() {
gpg -c -o- $1 # Encrypt data in filename to standard output (asks for a passphrase)
}
encrypt public.dat > private.dat # Write the function result to a file
이 이할 수도 .$()출력을 캡처합니다.
동시에 인 "복귀gpg(GnuPG).종료 코드를 다른 언어에는 없는 보너스로 생각하거나 기질에 따라 셸 기능의 "슈무체펙트"로 생각하십시오.일반적으로 이 상태는 성공 시 0 또는 다른 경우 1 ~255 범위의 정수입니다.이 점을 명확히 하기 위해:return 것)exit)는 0 ~255의 값만 사용할 수 있으며, 0 이외의 값이 반드시 오류일 필요는 없습니다.
인 않은 return상태는 Bash 스테이트먼트/함수/명령어 등의 마지막 명령어에서 가져옵니다. 항상가 있고, '그래서'가 요.return쉽게 제공할 수 있습니다.
$(...)에 포함된 명령어로 표준 출력으로 전송된 텍스트를 나타냅니다. return는 표준 출력으로 출력되지 않습니다. $?에 마지막 명령어 결과 코드를 나타냅니다.
fun1 (){
return 34
}
fun2 (){
fun1
local res=$?
echo $res
}
체인에 때 수 하거나 콜 체인에 여러 함수가 있을 때 덮어쓸 수 있다는 입니다.echo, 기능에서할 수 이 이것을 하는 것을 , 「예상하는 정보가 합니다).또는 「」, 「」, 「」, 「결과」, 「결과」, 「결과」, 「복귀치」, 「복귀」등의 버그가 합니다).eval너무 무겁고 해킹이 심해요
, 하는 것입니다.local배쉬하다§:
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는 발신자에 따라 다른 오브젝트를 가리킵니다.이것은 대부분의 프로그래밍 언어가 사용하는 어휘 범위 지정과는 다릅니다.이 기능은 실제로 문서화되어 있기 때문에 놓치기 쉬울 뿐만 아니라 잘 설명되지 않습니다.다음은 이에 대한 문서입니다(강조사항은 제 것입니다).
함수의 로컬 변수는 로컬 빌트인을 사용하여 선언할 수 있습니다.이러한 변수는 함수와 함수가 호출하는 명령에만 표시됩니다.
Python, JavaScript의일 수 가 아니라C, C++, Python, Java, C#, JavaScript에 할 수 .stdout/stderr파이프 인/아웃이 가능하며 종료 코드를 반환할 수 있습니다.기본적으로 스크립트에서 명령어를 정의하는 것과 명령줄에서 호출할 수 있는 실행 파일을 작성하는 것에는 차이가 없습니다.
따라서 스크립트를 다음과 같이 작성하는 대신 다음과 같이 하십시오.
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
어 어디 있죠?main()언을 선언하다ret_val as ~하듯이local and all other functions return values via 및 기타 모든 함수는 다음을 통해 값을 반환합니다.ret_val.
Unix 및 Linux의 "Shell 함수의 로컬 변수 범위" 질문도 참조하십시오.
상황에 따라서는 더 나은 해결책으로 당신이 게시한 것을 들 수 있습니다.local -n.
이를 실현하는 또 다른 방법은 이름 참조입니다(Bash 4.3+ 필요).
function example {
local -n VAR=$1
VAR=foo
}
example RESULT
echo $RESULT
그 thereturn기능 종료 코드를 설정합니다. 테 이 수 료 드 정 as합설, statement code다코 sets니 the the of종를 function함의 much스 the트먼 same는트 exit, code statement setsexit전체 스크립트를 위해 하겠습니다.이치노
는 항상 에서 사용할 수 .$?★★★★★★ 。
function fun1(){
return 34
}
function fun2(){
local res=$(fun1)
echo $? # <-- Always echos 0 since the 'local' command passes.
res=$(fun1)
echo $? #<-- Outputs 34
}
다른 사람의 뛰어난 투고에 대한 추가 정보로서 다음 기술을 요약한 기사를 소개합니다.
- 글로벌 변수를 설정하다
- 함수에 전달한 이름을 가진 글로벌 변수를 설정합니다.
- 반품코드 설정($로 픽업)
- 일부 데이터(MYVAR=$(myfunction)로 픽업)를 '연결'합니다.
함수가 정의되어 있는 스크립트로 실행되고 있는 경우는, 다음의 조작을 클릭합니다.
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"
이것이 마음에 듭니다.필요에 따라 echo 문을 함수에 포함할 수 있기 때문입니다.
my_function() {
echo "-> my_function()"
# Do stuff
POINTER="my_function_return"
echo "<- my_function. $POINTER"
}
가 생각할 수 가장 은 '우리'를 사용하는 입니다.echo와 같은
get_greeting() {
echo "Hello there, $1!"
}
STRING_VAR=$(get_greeting "General Kenobi")
echo $STRING_VAR
# Outputs: Hello there, General Kenobi!
「」를 호출하지 ,var=$(func)출력 하여 입력 수 있습니다.eval ,
var1="is there"
var2="anybody"
function modify_args() {
echo "Modifying first argument"
eval $1="out"
echo "Modifying second argument"
eval $2="there?"
}
modify_args var1 var2
# Prints "Modifying first argument" and "Modifying second argument"
# Sets var1 = out
# Sets var2 = there?
이것은, 다음의 경우에 도움이 됩니다.
- 기능 범위 내에서 stdout/stderr로 인쇄(반환하지 않음)
- 여러 변수를 반환(설정)합니다.
Windows에서 Git Bash가 여러 반환 값에 대해 어레이를 사용하고 있습니다.
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:
언급URL : https://stackoverflow.com/questions/17336915/return-value-in-a-bash-function
'programing' 카테고리의 다른 글
| Windows 배치 파일에서 팝업/메시지 상자 표시 (0) | 2023.04.18 |
|---|---|
| div 내부의 이미지에 이미지 아래에 여분의 공간이 있습니다. (0) | 2023.04.18 |
| Linux에서 Bash에서 syslog를 확인하는 방법 (0) | 2023.04.18 |
| WPF에서의 스크롤바의 이니블화 (0) | 2023.04.18 |
| 하나의 워크북에서 복사하여 다른 워크북에 붙여넣기 (0) | 2023.04.18 |