언급 한대로 bash
많은 배포판의 기본 설치에서 일반적으로 사용할 수 있습니다. 에 의존하여 스크립트가 최대 사용자 기반에 도달하지 않습니다 zsh
.
스크립트를 설계하기 전에 대답해야 할 중요한 질문은 " 스크립트가 실행되는 쉘이 중요한 이유는 무엇입니까? "입니다.
다른 쉘은 다른 구문을 사용하거나 다른 쉘에서 지원하지 않는 추가 쉘 기능을 제공합니다. "일반 Linux 최종 사용자 환경"에 대한 스크립트를 작성하려면 스크립트가 특정 쉘 환경에 의존하는 구문 또는 쉘 기능을 사용하는지 판별하십시오.
예를 들어, bash
쉘 은 dash
, Bourne 쉘 또는 /bin/sh
사용자 시스템에서 가리키는 것이 지원하지 않는 특정 확장을 지원 합니다.
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Feb 19 2014 /bin/sh -> dash
echo {1..10}
에 /bin/sh
비해 실행 을 시도 /bin/bash
하면 매우 다른 출력을 얻을 수 있습니다.
zsh
대부분의 bash
구문 을 지원하는 동안 bash
셸에서 지원하지 않는 추가 확장 및 구문을 제공 하는 것도 마찬가지 입니다. 구체적인 예는 셸 을 비교 한이 표를 참조하십시오 .
로 bash
호출 할 때 작동하는 스크립트를 준수 하여 잠재적 인 사용자 기반을 확장 할 수 있습니다 #!/bin/sh -u
. 그러나 이것은 또 다른 중요한 질문으로 이어진다 : " 더 큰 휴대 성과 교환하기 위해 무엇을 희생하고 있는가? "
보안 문제, 기능, 효율성 또는 스크립트에 우선 순위라고 생각하는 것과 관련된 차이점이 희생의 가치가 있는지 여부를 결정하십시오. 더 많은 환경에서 작동하기 때문에 알려진 보안 취약점이있는 스크립트를 광범위하게 사용하고 싶지 않을 수 있습니다.
명령 셸을 비교할bash
때 이러한 스크립트를 지원하기 위한 많은 스크립트가 기준으로 사용됩니다 . 쉘 환경 전용 스크립트 나 다른 구문 에 의존하는 것보다 더 많은 사람들이 스크립트를 실행할 수 있습니다.zsh
또한 궁극적으로 사용자가 스크립트를 실행하는 방법을 제어 할 수는 없습니다 ( 다른 쉘에서 스크립트 를 디버깅하는 데 유용함 ).
쉘을 사용하여 쉘 스크립트를 읽으면 (“sh scriptname”) 직접 실행하는 대신 (“./scriptname”) 쉘 스크립트 시작시 모든 주석을 주석으로 처리합니다. 특히, 스크립트를 실행할 때 사용할 인터프리터 ( "#! / bin / sh -u")를 지정하는 주석은 해당 인터프리터 옆에 나열된 모든 옵션과 마찬가지로 무시됩니다.
따라서 이것에 대해 할 수있는 최선의 방법은 스크립트가 어떻게 작동하는지에 대한 큰 희생이없는 한 스크립트를 이식 가능하게 만드는 것입니다.
Bash 코딩 규칙-스택 오버플로를 볼 수도 있습니다 .
zsh
은 인기가있을 수 있지만 다른 서클 ( 뱅킹 부문)에서는 거의 들리지 않습니다. 이에 대한 적절한 조언이 필요하면 더 많은 정보를 제공해야한다고 생각합니다.