이 웹사이트"셸 함수는 [별칭보다] 빠릅니다. 별칭은 함수 다음에 조회되므로 구문 분석 속도가 느려집니다. 별칭은 이해하기 쉽지만 거의 모든 목적에서 별칭보다 쉘 함수가 더 좋습니다."
이것을 감안할 때(올바른지 여부) 쉘 함수는 독립형 쉘 스크립트와 어떻게 비교됩니까? 하나가 다른 것보다 특별한 이점을 갖고 있습니까, 아니면 특정 유형의 작업에 더 적합합니까?
답변1
별칭과 함수의 주요 차이점은 별칭은 매개 변수를 사용하지 않지만 함수는 매개 변수를 사용한다는 것입니다. , 와 alias l='ls --color'
같은 것을 작성하면 별칭 확장을 잡고 함수에서 할 수 있는 것과는 다른 작업을 수행 할 수 없습니다 . 당신은 또한 볼 수 있습니다l foo
ls --color foo
foo
별칭에 매개변수를 전달하는 방법은 무엇입니까?.
별칭 찾기앞으로함수: 함수와 라는 별칭이 모두 있는 경우 foo
해당 foo
별칭이 호출됩니다. (별칭이 foo
확장되는 경우 일시적으로 차단되므로 alias ls='ls --color'
정상적으로 작동할 수 있습니다. 또한 를 실행하여 언제든지 별칭을 우회할 수 있습니다 \foo
.) 하지만 측정 가능한 성능 차이는 없을 것으로 예상됩니다.
함수와 독립형 스크립트는 대부분 유사한 기능을 가지고 있습니다. 제가 생각할 수 있는 몇 가지 차이점은 다음과 같습니다.
- 함수는 쉘 환경에서 실행되고 스크립트는 별도의 프로세스에서 실행됩니다. 따라서 함수는변화쉘 환경: 환경 변수 정의, 현재 디렉토리 변경 등 독립 실행형 스크립트는 이를 수행할 수 없습니다.
- 함수는 사용하려는 쉘의 언어로 작성되어야 합니다. 스크립트는 어떤 언어로든 작성할 수 있습니다.
- 함수는 정의될 때 로드됩니다. 스크립트가 호출될 때마다 로드됩니다. 이로 인해 다음과 같은 여러 가지 결과가 발생합니다.
- 스크립트를 수정하면 다음에 호출할 때 새 버전을 받게 됩니다. 함수 정의를 변경하는 경우 정의를 다시 로드해야 합니다.
- 로드가 많은 시스템에서는 기능이 더 빠릅니다.
- 사용하지 않을 기능이 많으면 메모리를 차지하게 됩니다. Ksh와 zsh는 bash가 아닌 것 같지만 자동 로딩 기능이 있습니다.
함수와 독립형 스크립트 사이에는 내장된 함수 source
를 사용하여 .
읽는 스크립트 조각이 있습니다. 함수와 마찬가지로 셸 환경을 수정할 수 있으며 셸 언어로 작성되어야 합니다. 스크립트와 마찬가지로 호출할 때마다 로드되며 매우 빠르게 로드되지는 않습니다.
¹예 , 알아요. tcsh에서는 작동하지 않습니다.