당신은 항상 사용해야 #! /bin/sh
합니다.
쉘 스크립트에서 bash (또는 zsh 또는 fish 또는 ...) 확장자를 사용해서는 안됩니다.
당신은 오직 작업 쉘 스크립트 작성해야 어떤 (쉘 자체와 함께 갈 모든 "유틸리티"프로그램을 포함) 쉘 언어의 구현을. 이 일을 수행 할 수 있습니다 아마 걸릴 POSIX.1-2001 ( 하지 쉘과 유틸리티가 어떤 능력이 있는지에 대한 권위로 -2008)를,하지만 당신은 (예를 들어 솔라리스 포트에 레거시 시스템에 스크립트를 하루 호출 할 수 있음을 인식 또는 AIX) 1992 년경에 쉘과 유틸리티가 동결되었습니다.
진심으로?!
예, 진심 으로요
쉘은 끔찍한 프로그래밍 언어입니다. 그것이 유일하게 할 일은 모든 유닉스 설치가 보장 /bin/sh
하는 유일한 스크립트 인터프리터입니다 .
핵심은 Perl 5 인터프리터 ( /usr/bin/perl
) 의 일부 반복이 무작위로 선택된 Unix 설치에서 사용 가능한 것 보다 더 가능성이 높다는 것 (/(usr|opt)(/(local|sfw|pkg)?)?/bin/bash
입니다. 다른 훌륭한 스크립팅 언어 (Python, Ruby, node.js 등) — 쉘과 비교할 때 해당 범주에 PHP와 Tcl도 포함시킬 것입니다.
따라서 bash 스크립트를 작성하는 옵션이 있으면 대신 끔찍한 프로그래밍 언어를 사용하는 옵션이 있습니다.
이제 간단한 쉘 스크립트, cron 작업이나 시퀀스에서 몇 개의 프로그램을 순서대로 실행하는 일종의 쉘 스크립트는 쉘 스크립트로 남겨 두는 데 아무런 문제가 없습니다. 그러나 간단한 쉘 스크립트에는 배열이나 함수가 필요하지 않습니다 [[
. 그리고 다른 선택이 없을 때 복잡한 쉘 스크립트 만 작성해야합니다 . 예를 들어, autoconf 스크립트는 여전히 셸 스크립트입니다. 그러나 이러한 스크립트는 구성되는 프로그램과 관련된 모든 화신 에서 실행되어야 /bin/sh
합니다. 즉, 확장을 사용할 수 없습니다. 당신은 아마 이러한 일 이전 독점 유닉스 걱정 할 필요는 없지만, 아마 해야 중 일부는 설치하지 마십시오, 현재 오픈 소스 BSD의 걱정bash
기본적으로 최소한의 쉘만 제공하는 내장 환경 및 busybox
.
결론적으로, 이식 가능한 쉘 언어로는 사용할 수없는 기능, 즉 스크립트가 쉘 스크립트를 유지하기에는 너무 복잡해 졌다는 신호를 원하는 순간 입니다. 더 나은 언어로 다시 작성하십시오.
bash
기능과 구문보다는sh
기능과 구문을.