sed, awk, Perl, sh 중에서 이식성이 가장 좋은 것은 무엇입니까?

sed, awk, Perl, sh 중에서 이식성이 가장 좋은 것은 무엇입니까?

이식성 순으로 이러한 도구의 순위를 매길 수 있습니까? 다음 중 어느 것입니까?확증하다가장 작은 *nix 시스템에서도 찾을 수 있나요? 그 중 100% 확실히 나타나는 사람이 있나요? 내 추측으로는 순서는 다음과 같다.

  1. sed
  2. 진주

일부 시스템에서는 기본적으로 Bourne 쉘을 사용하지 않는다고 생각하지만,일부쉘은 기본값으로 존재합니까, 아니면 항상 존재합니까 /bin/sh? Bourne 유형 인클로저가 아니라면 아마도 그렇지 않을 것입니다. 둘 다awk그리고sedPOSIX 사양에 이를 설명하는 페이지가 있으므로 아마도 항상 거기에 있을 것입니다. 그렇습니까? 내가 할 수 있을까?틀림없이둘 다 *nix에 설치됩니까? 임베디드 시스템도 포함되나요?

답변1

sed, awk, Perl, sh 중에서 이식성이 가장 좋은 것은 무엇입니까?

sedshawk그리고 POSIX에서 지정한 대로 이식성이 있다고 해서 perl표준에서 지원되지 않는다는 의미는 아닙니다.

이식성 순으로 이러한 도구의 순위를 매길 수 있습니까?

호환 가능한 코드 사용을 고집한다면 이식성을 위해 세 가지 POSIX 명령을 사용하면 안 됩니다.

다음 중 가장 작은 *nix 시스템에서도 반드시 찾을 수 있는 것은 무엇입니까?

운영 체제용 POSIX에는 세 가지 POSIX 도구와 기타 여러 유틸리티가 필요합니다. 그러나 최소화 또는 불완전/표준 이하 구현 제공으로 인해 일부 기능이 부족한 운영 체제가 존재합니다.

사실, 대부분의(전부는 아니지만) 무료 오픈 소스 Unix 계열 운영 체제는 아마도 적합성 프로세스를 통과하려고 해도 통과하지 못할 것이며 결코 시도하지도 않을 것입니다.

그 중 100% 확실히 나타나는 사람이 있나요?

*nix와 같은 운영 체제에는 Bourne 구문 기반 쉘이 없다는 사실에 놀랐지만 특히 임베디드 시스템의 경우 무엇이든 가능합니다.

내 생각엔 순서는 다음과 같다: 일부 쉘은 기본값으로 나타나며 항상 /bin/sh에 위치합니까?

/bin/shBourne 구문 시리즈 셸일 수 있지만 POSIX 호환 시스템에서도 POSIX 호환성은 보장되지 않습니다. 예를 들어 POSIX가 아닌 기존의 원래 Bourne 셸인 /usr/xpg4/bin/shSolaris 10 이하에서 작동합니다 ./bin/sh

답변2

sedAutotools에서 영감을 얻음: 제대로 작동해야 하는 무언가를 작성해야 한다면 Bourne 및 POSIX 셸(아마도 향상됨)의 가장 낮은 공통 분모를 고수하세요.어디에나. 일부 시스템에 문제가 있을 수 있지만 다시 작성하면 문제를 해결할 수 있습니다.

test예를 들어 일부 고대 시스템에는 다음과 같은 확장 오류 문제가 있습니다 [.

 if [ $foo = bar ] ; then...

그래서Autoconf가 하는 일은 그것을 다시 작성하는 것입니다다음과 같이 단일 문자 접두사와 함께 큰따옴표로 묶습니다.

 if [ x"$foo" = "xbar" ] ; then...

여기서도 "x$foo"사용할 수 있습니다. 이렇게 하면 $foo유효한 옵션이 될 가능성이 방지되며 별칭이므로 test(1)표현식 을 잘못 해석할 수 있습니다. 해결책은 알 수 없는 매개변수 to 가 항상 to 로 시작하는 상황을 설정하는 것입니다 . 즉, to 에 특별한 의미를 가질 수 없다는 뜻입니다 .[test[x[

(Autoconf는 또한 test대신 [M4[, 문법에도 사용됩니다. )

awk는 POSIX입니다, 이론적으로는 어디에서나 사용할 수 있습니다.Busybox에서도awk, 매우 엄격한 임베디드 Linux 시스템에서도 이를 달성할 수 있습니다. 그러나 awk.NET이 없는 시스템을 발견하더라도 놀라지 않을 것입니다 sed. 내 생각엔 복잡성 때문인 것 같습니다. 단순한 도구가 공격적인 분류에서 살아남을 가능성이 더 높습니다.

Perl은 널리 사용되는 표준(POSIX 등)에 속하지 않으므로 사전에 대상 환경에 대해 아무것도 모른다면 Perl을 믿을 수 없습니다. 기본적으로 Perl은 다음 위치에 설치되지 않습니다.

  • 시빈
  • FreeBSD와 NetBSD
  • Slackware를 포함한 일부 Linux의 "최소" 설치
  • 많은 임베디드 Linux는 주로 Busybox를 사용자 공간으로 사용합니다.

Autoconf 매뉴얼에는이식 가능한 쉘 프로그래밍에 관한 장이것이 도움이 될 것입니다. 마지막 부분에서는 sed, awk, 및 기타 여러 도구를 소개합니다.

관련 정보