dash, ash, sh 용으로 작성된 스크립트가 100 % 호환되는지 알고 싶었습니다.
추가 된 기능이 있습니까? 대시 또는 애쉬 또는 구문 변경?
내가들은 바에 따르면 애쉬는 sh의 직계 자손입니다.
댓글
답변
짧은 대답은 아니오입니다. “100 % 호환되지 않습니다.
그러나 대부분의 셸은 기본에 매우 가깝기 때문에 불일치가 거의 발생하지 않습니다. 사실, 대부분의 셸은 추가 된 구문에 따라 크게 다르지 않지만 탭 완성 및 유사한 일부 추가 기능에 따라 다릅니다.
또한 dash
는
— 또는 BSD에서 Linux 로의 포팅 (정확히 말하면). 그리고 모두 . 실제로 sh
는 대부분의 시스템에서 bash
, dash
또는 다른 것에 대한 심볼릭 링크입니다. 중요한 것은 POSIX 준수 —이며 표준에 따라 스크립트를 작성할 때 문제가 발생하지 않습니다.
이러한 쉘의 차이점은 최적화에 있습니다. bash
보다 기능이 덜 풍부하지만 완전히 합법적 인 셸입니다. Bash는 대화 형 작업에는 기능이 풍부하지만 예를 들어 더 많은 메모리를 사용합니다.
댓글
- 하지만 스크립트 사용의 경우 호환됩니까?
- 그리고 POSIX 준수에 대해, 내가 그 표준을 따르더라도, Bash 용으로 스크립트가 작성 되었다면 그것이 sh 또는 그 자손에서 실행될 것이라고 생각하지 않습니다
- 그들은 호환되어야합니다 모호한 기능을 사용하지 않는 경우 ' 서로 그러나 bash 스크립트를 사용하면 더 많은 문제가 발생할 수 있습니다.
- sh, ash 또는 dash와 함께 bash를 사용하려는 의도는 없습니다. 이러한 모호한 기능은 무엇입니까?
- bash '의 최신 기능 중 다수는 POSIX에 추가 된 것이므로 다음과 같은 경우 이식 불가능한 코드를 작성할 가능성이 점점 더 높아집니다. ' 사용 중입니다. IIRC는 [[]] 구조도 sh에 없습니다. 또한 ' 순수한 쉘 스크립트를 작성하지 않는 경우 도구의 차이도 작용합니다 (sed, grep, awk의 다른 버전).
li>
답변
일부 시스템, 특히 데비안에서는 / bin / ash 을 사용할 수 없습니다.
$ type ash dash bash: type: ash: not found dash is /bin/dash
댓글
- busybox ash가있을 수 있습니다.
- 즉, '
bash
도없는 시스템이 많이 있습니다.
man ash
checkbashisms
유틸리티를 사용하여 스크립트가 POSIX와 호환되는지 테스트 할 수 있습니다.