sed, awk, perl 및 sh 중 가장 이식성이 좋은 것은 무엇입니까?


15

누군가가 이식성 순서대로 이러한 도구를 넣을 수 있습니까? 이들의 어떤은 특정 심지어 가장 최소한의 유닉스 계열의 시스템에서 발견 될? 그들 중 100 %가 존재해야합니까? 내 생각 엔 순서는 다음과 같습니다.

  1. 어 wk
  2. sed

bourne shell이 ​​기본값이 아닌 시스템이 있다고 생각하지만 일부 쉘이 기본값으로 표시됩니다 /bin/sh. 아마도 본 타입 쉘이 아닌 경우에는 그렇지 않습니다. 모두 awksed는 POSIX 사양에 그들을 설명하는 페이지가 그래서 아마도 그들은 항상 존재합니다. 그렇습니까? 나는 할 수 있는지 모두가 모든 * nix에서 스크립트에 설치됩니다? 임베디드 시스템 포함?


임베디드 시스템은 종종 이식성을 최소화하여 유지합니다. 대부분 POSIX를 준수하지 않습니다.
jordanm

@jordanm은 아마도 이것들 중 어느 것도 가지고 있지 않을 수 있음을 의미 합니까? 최소한 최소한의 쉘 인터페이스를 제공하는 시스템을 가정하고 있습니다. 그 비지 박스가 제공하는 알고 sh, awk그리고 sed예를 들어 내 비지 박스 기반의 NAS에 대해서도 펄이있다.
terdon

1
당신은 그것들을 가지고 있을지 모르지만, 그들이하는 것은 시스템에 따라 다를 수 있으므로, 질문은 언급 된대로 의미가 없습니다.
Stéphane Chazelas

@StephaneChazelas 아, 그럼 좁힐 수 있습니까? 시스템 X에서 발견 될 가능성에 따라 정렬 할 수 없습니까? 내 경험은 엄밀히 리눅스와 몇 개의 임베디드 NAS 시스템입니다. 이 네 가지가 모두 없으면 GNU / 리눅스를 얻을 수는 없지만 어느 것이 가장 안전한지 알 수 없습니까?
terdon

답변:


15

sed, awk, perl 및 sh 중 가장 이식성이 좋은 것은 무엇입니까?

sed, shawkPOSIX에 의해 특정되는 휴대 성, perl등의 표준에 의해 뒷받침되지 아니다.

누군가가 이식성 순서대로 이러한 도구를 넣을 수 있습니까?

호환 코드를 고수하면 3 개의 POSIX 명령에 대한 이식성 순서가 없어야합니다.

가장 작은 * nix 시스템에서도이 중 어느 것이 발견됩니까?

다른 많은 유틸리티와 함께 ​​세 개의 POSIX는 POSIX가되어야합니다. 그러나 최소화로 인해 일부가 부족하거나 불완전한 / 부적합한 구현을 제공하는 OS는 존재합니다.

실제로 운영 체제와 같은 대부분의 무료 및 오픈 소스 Unix는 시도하려는 경우 준수 프로세스를 통과하지 못하고 어쨌든 시도하지 않습니다.

그들 중 100 %가 참석해야합니까?

Bourne 구문 기반 셸이없는 OS와 같은 * nix를 발견 한 것에 놀랐지 만, 특히 임베디드 시스템에서 가능합니다.

내 생각에 순서는 다음과 같습니다. 일부 쉘은 기본값으로 표시되며 항상 / bin / sh에 있습니까?

/bin/shBourne 구문 제품군 쉘일 가능성이 있지만 POSIX 호환 시스템, 심지어 POSIX 호환 시스템 일 수도 있습니다. 예를 들어, /usr/xpg4/bin/shSolaris 10 이상에 있고 /bin/shPOSIX가 아닌 레거시 원본 Bourne 쉘입니다.


12

상기 Autotools가에서 큐 보자 - 아마도에 의해 증강 Bourne 씨와 POSIX 쉘의 최소 공통 분모에 스틱을 sed- 당신이 쓰기 뭔가가해야 일이 있으면 모든 곳 . 문제가있는 시스템이있을 수 있지만 다시 작성하여 이러한 문제를 해결할 수 있습니다.

예를 들어, 일부 고대 시스템의 경우 test일명 확장 오류에 문제가 있습니다 [.

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

그래서 Autoconf의 연습을 다시 작성하는 것입니다 과 같이, 하나의 문자 접두사와 따옴표 :

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

"x$foo"여기 에서도 사용할 수 있습니다. 가능성에 대한이 경비는 그 $foo에게 유효한 옵션이 될 수 test(1)및 때문에 [별명입니다 test, 그것은 표현을 잘못 해석 할 수있다. 해결책은 알 수없는 인수가 [항상로 시작 하는 상황을 설정 x하는 것 [입니다. 즉,에 특별한 의미를 가질 수 없습니다 .

(Autoconf도 test대신을 사용 하는 것이 [좋지만이 조언은 구문에서 사용되는 M4 와의 충돌 가능성에 대한 반응으로 발생 [합니다.)

awk는 POSIX 이므로 이론적으로 모든 곳에서 사용할 수 있습니다. Busybox에도 있으므로 awk매우 제한적인 임베디드 Linux 시스템에서도 구현할 수 있습니다. 그래도, 내가하지 않고 시스템 건너 덜 놀랄 것 awk보다 더 sed. 복잡성이 줄어든다고 생각합니다. 단순한 도구는 공격적인 심사에서 살아남을 가능성이 높습니다.

Perl은 널리 알려진 표준, POSIX 또는 기타의 일부가 아니므로 대상 환경에 대해 사전에 아무것도 모른다면 간단히 신뢰할 수 없습니다. Perl은 기본적으로 다음에 설치되지 않습니다.

  • 시그윈
  • FreeBSD와 NetBSD
  • Slackware를 포함한 일부 Linux의 경우 "최소"설치
  • 사용자 영역을 위해 Busybox를 주로 사용하는 많은 임베디드 Linux

Autoconf 매뉴얼에는 휴대용 쉘 프로그래밍에 관한 장이 있으며 도움이 될 것입니다. 마지막 섹션 커버 도구처럼 sed, awk그리고 많은 다른 사람.


고마워요, 그러나 나는 이것들의 이식성의 순서에 대해 궁금합니다. 내가 바로 당신을 읽는다면, 당신은 것을 건의하는 shsed가장 휴대용입니다. 좋아, 다른 사람은? 그리고 sh정말 휴대용인가요? 기본 쉘이 C 쉘 파생 인 경우 어떻게합니까? 그러한 시스템에는 여전히 심볼릭 링크가 /bin/sh있습니까?
terdon

비록 일이 모두 편집에 대한 감사 sedawk비지 박스에 의해 제공됩니다, 왜 더 찾을 수 놀랄 것 sed없는? busybox 대안이 sed 및 awk를 제공하는지 알고 있습니까?
terdon

다시 : POSIX 대 Bourne 쉘 은 LCD의 두 가지를 고수하는 조언을 다시 썼습니다. 다시 : 견적을 인용 , 나는 그 이유를 잘못 기억하지만, Autoconf 매뉴얼에서 이유가 다루는 장을 찾아 그에 따라 답변을 편집했습니다. Re : sed vs awk 및 Busybox 는 더 큰 복잡성과 심사를 설명했습니다. sed이보다 적은 값을 사용하므로 이진 파일이 더 작아 지므로이 파일을 제거 할 이유가 적습니다 awk. 이는 상당히 복잡합니다. (시스템에서 20 kiB vs 48 kiB) Re : Busybox 대안 , 나는 다른 원 스톱 쇼핑 대안을 모른다 .
Warren Young

+1 내가 (가장 낮은 공통 분모가 어떤 종류의 것이라고 여기 일반적인 전제에 동의하기 때문에 sh- 홀수 terdon 계급이 awksed?이 O_O 위)이 Autotool의 목적으로 만 우연의 일치하지만 일부 환경, 특히 작은 것들 때문에, 건물, 기간을위한 것이 아닙니다.
goldilocks

1
@WarrenYoung 그게 내가 궁금했던 것입니다. 모든 * nix 시스템에 기본적으로 Bourne 쉘이 설치되어 있는지 여부는 전혀 알지 못했습니다. 그들은 모두있는 경우 /bin/sh, 다음 상황이 다르다 그러나 나는하지 않았다 알고 모두가 하나가 것이다. 그런데 이것을 받아들이지 않아서 미안합니다. 나는 당신과 jlliagre의 대답 사이에서 찢어졌습니다. 나는 그것을 더 직접적으로 다루고 덜 담당자가 있기 때문에 그의 선택 :).
terdon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.