it-swarm-ko.tech

별칭 대 함수 대 스크립트

이 사이트 는 "쉘 함수가 [별칭보다] 빠릅니다. 별칭은 함수를 조회하므로 확인 속도가 느립니다. 별칭은 이해하기 쉽지만 거의 모든 용도에서 별칭보다 쉘 함수가 선호됩니다. . "

(참이든 아니든) 셸 함수는 독립형 셸 스크립트와 어떻게 비교됩니까? 하나가 다른 것보다 특별한 이점이 있습니까, 아니면 특정 유형의 작업에 더 적합합니까?

37
Wolf

별칭과 함수의 주요 차이점은 별칭은 인수 ¹가 아니라 함수가한다는 것입니다. alias l='ls --color'와 같이 작성하면 l fools --color foo로 확장됩니다. 별칭 확장에 foo을 (를) 잡고 함수로 할 수있는 방식으로 다른 작업을 수행 할 수 없습니다. 파라미터를 별칭에 전달하는 방법? 도 참조하십시오.

별칭은 함수 전에 조회됩니다 함수와 foo라는 별칭이 모두있는 경우 foo은 별명. (별명 foo이 확장되면 일시적으로 차단되어 alias ls='ls --color'와 같은 작업이 작동합니다. 또한 \foo를 실행하여 언제든지 별칭을 우회 할 수 있습니다.) 그래도 측정 가능한 성능 차이를 기대하지 않습니다.

함수와 독립 실행 형 스크립트는 거의 비슷한 기능을 가지고 있습니다. 생각할 수있는 몇 가지 차이점은 다음과 같습니다.

  • 함수는 셸 환경 내에서 실행됩니다. 스크립트는 별도의 프로세스에서 실행됩니다. 따라서 함수는 셸 환경을 변경 할 수 있습니다. 환경 변수 정의, 현재 디렉터리 변경 등. 독립 실행 형 스크립트는이를 수행 할 수 없습니다.
  • 함수는 사용하려는 쉘의 언어로 작성되어야합니다. 스크립트는 모든 언어로 작성 될 수 있습니다.
  • 함수는 정의 될 때로드됩니다. 스크립트는 호출 될 때마다로드됩니다. 이것은 몇 가지 결과를 가져옵니다.
    • 스크립트를 수정하면 다음에 호출 할 때 새 버전을 가져옵니다. 함수의 정의를 변경하면 정의를 다시로드해야합니다.
    • 로드가 많은 시스템에서는 기능이 더 빠릅니다.
    • 사용할 수없는 기능이 많으면 메모리를 차지하게됩니다. Ksh 및 zsh,하지만 bash가 아니라고 생각합니다. 함수 자동 로딩의 형태가 있습니다.

함수와 독립 실행 형 스크립트의 중간에있는 것은 source 또는 . 내장으로 읽는 스크립트 스 니펫입니다. 함수와 마찬가지로 셸 환경을 수정할 수 있으며 셸 언어로 작성해야합니다. 스크립트와 마찬가지로 호출 될 때마다 즉시로드됩니다.

¹ 예, tcsh에는 적용되지 않습니다.