Bash 함수

Bash 함수

2022-05-17 last update

12 minutes reading bash terminal
Bash 함수는 본질적으로 여러 번 호출할 수 있는 명령 그룹입니다.함수의 목적은 bash 스크립트의 가독성을 향상시키고 같은 코드를 반복적으로 작성하지 않도록 하는 것입니다.대부분의 프로그래밍 언어에 비해 Bash 함수는 한계가 있습니다.이 강좌에서 Bash 함수에 대한 기초 지식을 소개하고 셸 스크립트에서 사용하는 방법을 보여 드리겠습니다.

Bash 함수 정의

bash 함수를 설명하는 문법은 매우 간단하다.함수는 두 가지 다른 형식으로 설명할 수 있다.
  • 첫 번째 형식은 함수 이름으로 시작하고 그 다음은 괄호이다.이것은 선호되고 더 자주 사용하는 형식이다.
    function_name () {
      commands
    }
    단행버전:
    function_name () { commands; }
  • 두 번째 형식은 보존자function로 시작하고 함수명이다.
    function function_name {
      commands
    }
    단행버전:
    function function_name { commands; }
  • 주의해야 할 몇 가지:
  • 괄호({}) 사이의 명령을 함수체라고 한다.괄호는 반드시 빈칸이나 줄 바꾸기로 몸과 분리해야 한다.
  • 정의 함수는 그것을 실행하지 않습니다.bash 함수를 호출하려면 함수 이름만 사용하십시오.셸 스크립트에서 함수를 호출할 때마다 괄호 사이의 명령을 실행합니다.함수 정의는 함수 호출 전에 두어야 합니다.
  • 단행 압축 함수를 사용할 때 분호;는 함수의 마지막 명령 뒤에 있어야 한다.
  • 는 항상 함수명의 묘사성을 유지하려고 시도한다.
  • 이 점을 더 잘 이해하기 위해서는 아래의 예를 보십시오. ~/hello world.sh
    #!/bin/bash
    
    hello_world () {
       echo 'hello, world'
    }
    
    hello_world
    는 코드를 한 줄씩 분석합니다.
  • 세 번째 줄에서 함수에 이름을 붙여 함수를 정의합니다.괄호{는 함수 주체의 시작을 상징한다.
  • 선로4는 기능체다.함수체는 여러 개의 명령, 문장과 변수 성명을 포함할 수 있다.
  • 5은 끝의 괄호}hello_world 함수의 끝을 정의했다.우리는 함수를 실행하고 있다.필요에 따라 이 함수를 여러 번 실행할 수 있습니다.
  • 스크립트를 실행하면 인쇄7됩니다.

    변수 범위

    전역 변수는 스크립트의 모든 위치에서 접근할 수 있는 변수입니다.Bash에서는 기본적으로 모든 변수가 함수 내부에서 선언되더라도 글로벌 변수로 정의됩니다.국부 변수는 함수체에서 hello, world 키워드로 설명할 수 있으며, 이 함수에서만 사용할 수 있다.서로 다른 함수에는 동명의 국부 변수가 있을 수 있다.Bash에서 변수 역할 영역의 작동 방식을 더 잘 설명하기 위해서 다음과 같은 예를 고려합니다: ~/variables\u 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"
    
    스크립트는 먼저 두 개의 전역 변수localvar1를 정의한다.그리고 하나의 함수가 국부 변수var2를 설정하고 전역 변수var1를 수정한다.스크립트를 실행하면 다음 출력을 볼 수 있습니다.
    Before executing function: var1: A, var2: B
    Inside function: var1: C, var2: D
    After executing function: var1: A, var2: D
    
    위의 출력에서 결론을 얻을 수 있습니다.
  • 함수체에서 기존 전역 변수와 같은 이름으로 설정된 국부 변수는 전역 변수보다 우선적입니다.함수(91678)에서 전역 변수를 변경할 수 있습니다.
  • 반환값

    는'실'프로그래밍 언어의 함수와 달리 Bash 함수는 호출할 때 값을 되돌려주는 것을 허용하지 않습니다.bash 함수가 완성되었을 때, 그 반환값은 함수에서 실행된 마지막 문장의 상태var2로 성공을 표시하고, 영소수가 아닌 것은 실패를 나타낸다.0 키워드를 사용하여 반환 상태를 지정하고 변수return에 할당할 수 있습니다.$?문장 종지 함수.함수로 볼 수 있음exit status
    .~/return 값입니다.sh
    #!/bin/bash
    
    my_function () {
      echo "some result"
      return 55
    }
    
    my_function
    echo $?
    
    some result
    55
    
    는 함수에서 임의의 값을 실제적으로 되돌려 주려면 다른 방법을 사용해야 한다.가장 간단한 방법은 함수의 결과를 전역 변수에 부여하는 것입니다: ~/returnauvalues.sh
    #!/bin/bash
    
    my_function () {
      func_result="some result"
    }
    
    my_function
    echo $func_result
    
    some result
    
    함수에서 값을 되돌려주는 또 다른 선택은 echo로 값을 return로 보내는 것이다.
    또는 stdout
    ~/return 값은 다음과 같습니다.sh
    #!/bin/bash
    
    my_function () {
      local func_result="some result"
      echo "$func_result"
    }
    
    func_result="$(my_function)"
    echo $func_result
    
    some result
    
    는 메시지를 stdout에 출력하는 함수를 간단하게 실행하는 것이 아니라 printf 명령을 사용하여 함수 출력을 func_result 변수에 분배하는 것을 대체합니다.나중에 필요에 따라 이 변수를 사용할 수 있다.

    Bash 함수에 매개변수 전달

    임의의 수량의 매개 변수를 bash 함수에 전달하려면 함수 이름 뒤에 놓고 빈칸으로 구분하면 된다.빈칸이 있는 파라미터를 잘못 인용하지 않도록 인용하는 것이 좋다.(adsbygoogle=window.adsbygoogle | |[]).추진({});
  • 가 전달하는 매개 변수는 $(),$1,$2...$3로 함수명 뒤에 대응하는 매개 변수의 위치이다.
  • $n 변수는 함수명으로 보존되어 있다.
  • $0 변수는 함수에 전달되는 위치 매개 변수/매개 변수의 수량을 저장한다.
  • $#$* 변수는 함수에 전달된 모든 위치 파라미터를 저장한다.
  • 큰따옴표의 경우 [email protected]는 공백으로 구분된 문자열(IFS의 첫 번째 문자)-"$*"로 확장됩니다.
  • 큰따옴표의 경우 "$1 $2 $n"는 별도의 문자열 - "[email protected]"로 확장됩니다.
  • 큰따옴표가 아니면 "$1" "$2" "$n"$*는 같다.여기에 예가 하나 있습니다: ~/passing 매개 변수입니다.sh
    #!/bin/bash
    
    greeting () {
      echo "Hello $1"
    }
    
    greeting "Joe"
    
    Hello Joe
    

    결론

    Bash 함수는 특정 조작을 수행하기 위해 설계된 재사용 가능한 코드 블록입니다.정의되면 이 함수는 스크립트에서 여러 번 호출할 수 있습니다.Bash 함수를 사용하여 만드는 방법memorable shortcut command도 알고 싶을 수 있습니다.
    더 긴 지휘가 필요하다.질문이나 피드백이 있으면 언제든지 댓글을 달아주세요.