대화형 셸에서 bash의 임시 함수 선언 및 사용

대화형 셸에서 bash의 임시 함수 선언 및 사용

기본적으로는 이렇습니다

// declare
const my_func = function(param1, param2) { do_stuff(param1, param2) }
// use
my_func('a', 'b');

파일을 사용하지 않고 현재 대화형 셸 내에서 모두

답변1

bash함수는 쉘 스크립트에서와 동일한 방식으로 대화형 쉘에서 정의됩니다 bash.

귀하의 예를 출발점으로 사용하십시오.

my_func () { do_stuff "$1" "$2"; }

명령줄에 이를 입력할 수 있습니다. 그런 다음 호출합니다(명령줄에서도 가능).

my_func 'something' 'something else' 'a third thing'

참고로 C나 C++ 같은 언어에서처럼 매개변수 목록을 선언할 필요는 없습니다. 지능적으로 얻은 인수를 사용하는 것은 함수에 달려 있습니다(그리고 나중에 더 심각한 작업에 사용될 것인지 여부는 함수의 사용을 문서화하는 것도 사용자에게 달려 있습니다).

이는 do_stuff내가 전달한 세 매개변수 중 첫 번째 매개변수로 호출됩니다 my_func.

뭔가를 하는 함수약간더 흥미로운:

countnames () (
    shopt -s nullglob
    names=( ./* )
    printf 'There are %d visible names in this directory\n' "${#names[@]}"
)

대화형 쉘에 입력하는 것을 막을 수 있는 것은 없습니다 bash. 그러면 countnames현재 쉘 세션에서 쉘 기능을 사용할 수 있게 됩니다. (함수 본문을 하위 쉘( )에 작성하고 있다는 점에 유의하십시오 . 호출 쉘에 설정된 쉘 옵션에 영향을 주지 않고 쉘 옵션을 (...)설정하고 싶기 때문에 이 작업을 수행합니다 . 그러면 배열은 다음과 같이 자동으로 로컬 배열이 됩니다. 잘.)nullglobnames

시험:

$ countnames
There are 0 visible names in this directory
$ touch file{1..32}
$ ls
file1  file12 file15 file18 file20 file23 file26 file29 file31 file5  file8
file10 file13 file16 file19 file21 file24 file27 file3  file32 file6  file9
file11 file14 file17 file2  file22 file25 file28 file30 file4  file7
$ countnames
There are 32 visible names in this directory

또는 zsh이 기능에 대한 보다 정교한 도우미로 셸을 사용하세요.

countnames () {
    printf 'There are %d visible names in this directory\n' \
        "$(zsh -c 'set -- ./*(N); print $#')"
}

함수를 "정의 해제"(삭제)하려면 다음을 사용하세요 unset -f.

$ countnames
There are 3 visible names in this directory
$ unset -f countnames
$ countnames
bash: countnames: command not found

관련 정보