기본적으로는 이렇습니다
// 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
현재 쉘 세션에서 쉘 기능을 사용할 수 있게 됩니다. (함수 본문을 하위 쉘( )에 작성하고 있다는 점에 유의하십시오 . 호출 쉘에 설정된 쉘 옵션에 영향을 주지 않고 쉘 옵션을 (...)
설정하고 싶기 때문에 이 작업을 수행합니다 . 그러면 배열은 다음과 같이 자동으로 로컬 배열이 됩니다. 잘.)nullglob
names
시험:
$ 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