í커ë°ë°ì´_2
차례:
Bash 함수는 본질적으로 여러 번 호출 할 수있는 명령 세트입니다. 함수의 목적은 bash 스크립트를보다 읽기 쉽게 만들고 동일한 코드를 반복해서 쓰지 않도록하는 것입니다.
대부분의 프로그래밍 언어에 비해 Bash 기능은 다소 제한적입니다. 이 튜토리얼에서는 Bash 함수의 기본 사항을 다루고 쉘 스크립트에서이를 사용하는 방법을 보여줍니다.
배쉬 함수 선언
bash 함수를 선언하는 구문은 매우 간단합니다. 두 가지 형식으로 선언 될 수 있습니다.
-
첫 번째 형식은 함수 이름으로 시작하고 그 뒤에 괄호가옵니다. 선호되는 형식입니다.
function_name () { commands }
한 줄 버전:
function_name () { commands; }
두 번째 형식은
function
예약어와 함수 이름으로 시작합니다.function function_name { commands }
한 줄 버전:
function function_name { commands; }
몇 가지주의 할 사항:
- 중괄호
{}
사이의 명령 목록은 함수의 본문입니다. 함수 본문을 둘러싼 중괄호는 공백이나 줄 바꿈으로 본문과 분리해야합니다. 함수를 정의해도 실행되지 않습니다. bash 함수를 호출하려면 단순히 함수 이름을 사용하십시오. 중괄호 사이의 명령은 셸 스크립트에서 함수가 호출 될 때마다 실행됩니다. 함수 정의는 함수를 호출하기 전에 배치해야합니다. 한 줄의 "compacted"함수를 사용하는 경우 세미콜론;
함수의 마지막 명령을 따라야합니다. 항상 함수 이름을 설명 적으로 유지해야합니다.
이를 더 잘 이해하려면 다음 예를 살펴보십시오.
~ / hello_world.sh
#!/bin/bash hello_world () { echo 'hello, world' } hello_world
코드를 한 줄씩 분석해 봅시다:
-
3
행에서 함수 이름을 지정하고 함수 본문의 시작을 나타내는 중괄호{
를 열어 함수를 정의합니다.4
은 함수 본문입니다. 함수 본문은 여러 명령과 변수 선언을 포함 할 수 있습니다. 닫는 중괄호}
인 Line7
는hello_world
함수의 끝을 정의합니다.7
번째 줄에서 함수를 실행합니다. 필요한만큼 기능을 실행할 수 있습니다.
스크립트를 실행하면
hello, world
가 인쇄됩니다.
변수 범위
전역 변수는 범위에 관계없이 스크립트의 어느 곳에서나 액세스 할 수있는 변수입니다. Bash에서 기본적으로 모든 변수는 함수 내에서 선언 된 경우에도 전역 변수로 정의됩니다.
로컬 변수는
local
키워드를 사용하여 함수 본문 내에서 선언 할 수 있으며 해당 함수 내에서만 사용할 수 있습니다. 다른 함수에서 같은 이름의 지역 변수를 가질 수 있습니다.
Bash에서 변수 범위가 작동하는 방식을 더 잘 설명하기 위해 예제를 살펴 보겠습니다.
~ / variables_scope.sh
#!/bin/bash var1='A' var2='B' my_function () { local var1='C' var2='D' echo "Inside function: var1: $var1, var2: $var2" } echo "Before executing function: var1: $var1, var2: $var2" my_function echo "After executing function: var1: $var1, var2: $var2"
스크립트는 두 개의 전역 변수
var1
및
var2
를 정의하여 시작합니다. 그런 다음 지역 변수
var1
을 설정하고 전역 변수
var2
수정하는 함수입니다.
Before executing function: var1: A, var2: B Inside function: var1: C, var2: D After executing function: var1: A, var2: D
위의 결과에서 다음과 같이 결론을 내릴 수 있습니다.
- 함수 본문 내에서 기존 전역 변수와 동일한 이름으로 지역 변수를 설정하면 전역 변수보다 우선합니다. 전역 변수는 함수 내에서 변경할 수 있습니다.
반환 값
"실제"프로그래밍 언어의 함수와 달리 Bash 함수를 사용하면 호출 할 때 값을 반환 할 수 없습니다. bash 함수가 완료되면 리턴 값은 함수에서 마지막으로 실행 된 명령문의 상태입니다 (성공의 경우
0
, 실패의 경우 1-255 범위의 0이 아닌 10 진수).
return
키워드를 사용하여 반환 상태를 지정할 수 있으며
$?
변수에 할당됩니다
$?
.
return
문은 함수를 종료합니다. 이를 기능의 종료 상태로 생각할 수 있습니다.
#!/bin/bash my_function () { echo "some result" return 55 } my_function echo $?
some result 55
실제로 함수에서 임의의 값을 반환하려면 다른 방법을 사용해야합니다. 가장 간단한 옵션은 함수 결과를 전역 변수에 할당하는 것입니다.
~ / return_values.sh
#!/bin/bash my_function () { func_result="some result" } my_function echo $func_result
some result
함수에서 값을 반환하는 또 다른 더 나은 옵션은 아래와 같이 echo 또는
printf
사용하여 값을
stdout
으로 보내는 것입니다.
#!/bin/bash my_function () { local func_result="some result" echo "$func_result" } func_result="$(my_function)" echo $func_result
some result
메시지를 stdout에 인쇄하는 함수를 단순히 실행하는 대신
$()
명령 대체를 사용하여
func_result
변수에 함수 출력을 지정합니다. 나중에 필요에 따라 변수를 사용할 수 있습니다.
배쉬 함수에 인수 전달
bash 함수에 여러 개의 인수를 전달하려면 함수 이름 바로 뒤에 공백으로 구분하여 넣으십시오. 공백이있는 인수를 잘못 해석하지 않도록 인수를 큰 따옴표로 묶는 것이 좋습니다.
- 전달 된 매개 변수는
$1
,$2
,$3
…$n
이며 함수 이름 다음에 매개 변수의 위치에 해당합니다.$0
변수는 함수 이름으로 예약되어 있습니다.$#
변수에는 위치 매개 변수 / 인수의 수$*
및$@
변수는 함수에 전달 된 모든 위치 매개 변수 / 인수를 보유합니다.- 큰 따옴표로 묶인 경우
"$*"
는 공백으로 구분 된 단일 문자열 (IFS의 첫 문자)-"$1 $2 $n"
"$@"
확장됩니다. 큰 따옴표로 묶으면"$@"
문자열을 분리하도록 확장됩니다-"$1" "$2" "$n"
. 큰 따옴표로 묶지 않으면$*
와$@
는 같습니다.
- 큰 따옴표로 묶인 경우
예를 들면 다음과 같습니다.
~ / passing_arguments.sh
#!/bin/bash greeting () { echo "Hello $1" } greeting "Joe"
결론
Bash 함수는 특정 작업을 수행하도록 설계된 재사용 가능한 코드 블록입니다. 일단 정의되면 스크립트 내에서 함수를 여러 번 호출 할 수 있습니다.
Bash 함수를 사용하여 더 긴 명령에 대해 기억에 남는 바로 가기 명령을 만드는 방법에 대해서도 읽어보십시오.
bash 터미널