programing

sh와 bash의 차이

iphone6s 2023. 5. 22. 20:49
반응형

sh와 bash의 차이

프로그램을때, 셸프그을작때성할램, 종사다니용합종는우리로,다를 사용합니다./bin/sh그리고./bin/bash 주로사용다니를 사용합니다.bash하지만 저는 그들 사이에 무엇이 다른지 모르겠습니다.

와 Bash의 입니까?sh?

및 Bash에서 할 때 해야 할 입니까?sh?

sh가 무엇입니까?

sh셸 명령어()는 POSIX 표준에 의해 기술되는 프로그래밍 언어입니다.여러 가지 구현이 있습니다.ksh88대시, ...).또한 Bash는 다음의 구현으로 간주될 수 있습니다.sh(아래 참조).

ㅠㅠsh입니다./bin/sh는 대부분의 POSIX 시스템에서 실제 구현에 대한 심볼릭 링크(또는 하드 링크)입니다.

Bash란 무엇입니까?

는 Bash는 처음시다니습했으로 했습니다.sh-호환 가능한 구현(POSIX 표준보다 몇 년 앞서지만), 시간이 지남에 따라 많은 확장 기능을 획득했습니다.이러한 확장의 대부분은 유효한 POSIX 셸 스크립트의 동작을 변경할 수 있으므로 Bash 자체는 유효한 POSIX 셸이 아닙니다.오히려 POSIX 셸 언어의 방언입니다.

는 Bash 다을지다니합을 합니다.--posix스위치를 사용하면 POSIX 호환성이 향상됩니다.로 호출되면 POSIX를 모방하려고 합니다.sh.

sh = bash?

오동안랫,,/bin/sh가킬때사는되용리를 때 합니다./bin/bash대부분의 GNU/리눅스 시스템에서.결과적으로, 둘 사이의 차이를 무시하는 것이 거의 안전해졌습니다.하지만 그것은 최근에 바뀌기 시작했습니다.

다음과 같은 시스템의 몇 가지 일반적인 예/bin/sh 가리키지 ./bin/bash 그 중는 (그리고그중일부일부그중▁(▁some▁of▁(그)/bin/bash존재하지 않을 수 있음)는 다음과 같습니다.

  1. 심볼릭 링크인 현대의 데비안과 우분투 시스템shdash기본적으로;
  2. 일반적으로 Linux 시스템 부팅 시간에 실행되는 [Busybox]:initramfs 셸 구현을 사용합니다.
  3. BSD 시스템, 일반적으로 Linux가 아닌 모든 시스템.OpenBSD 사용pdksh콘셸의 후예FreeBSD'ssh는 원래 Unix Bourne 셸의 하위 제품입니다.Solaris에는 자체 솔루션이 있습니다.sh오랫동안 POSIX와 호환되지 않았던 이 솔루션은 Herloom 프로젝트에서 무료로 구현할 수 있습니다.

당신은 어떻게 그것을 알아낼 수 있습니까?/bin/sh시스템에서 가리키는 포인트는?

더 복잡한 것은/bin/sh기호 링크 또는 하드 링크일 수 있습니다.심볼릭 링크인 경우 이동식으로 해결할 수 있는 방법은 다음과 같습니다.

% file -h /bin/sh
/bin/sh: symbolic link to bash

연결이 어렵다면 시도해 보세요.

% find -L /bin -samefile /bin/sh
/bin/sh
/bin/bash

실, 그.-L플래그는 심볼릭 링크와 하드 링크를 모두 포함하지만, 이 방법의 단점은 휴대용이 아니라는 것입니다. POSIX는 필요하지 않습니다. find지원하기 위해-samefile옵션, GNU 찾기와 FreeBSD 모두 지원합니다.

세방선

결국, "쉐방" 줄을 스크립트의 첫 줄로 작성하여 어떤 것을 사용할지 결정하는 것은 사용자에게 달려 있습니다.

예.

#!/bin/sh

을 사용합니다.sh (그리고무일일슨든간어에나이▁that▁(간()

#!/bin/bash

을 사용합니다./bin/bash사용 가능한 경우(사용 가능하지 않은 경우에는 오류 메시지와 함께 실패).물론 다른 구현을 지정할 수도 있습니다.

#!/bin/dash

어떤 것을 사용할 것입니까?

나는 내 대본을 선호합니다.sh다음과 같은 이유로.

  • 표준화되어 있습니다.
  • 배우는 것이 훨씬 간단하고 쉽습니다.
  • 시스템할 수 . POSIX 시스 이가다니능합이 입니다. 비록 그들이 그것을 가지고 있지 않더라도.bash그들은 가지고 있어야 합니다.sh

사용 시 이점이 있습니다.bash을 더 하게 하고 언어의 .그것의 특징들은 프로그래밍을 더 편리하게 하고 다른 현대 프로그래밍 언어의 프로그래밍과 유사하게 만듭니다.여기에는 범위가 지정된 로컬 변수 및 배열과 같은 것이 포함됩니다.sh매우 미니멀리즘적인 프로그래밍 언어입니다.

sh: http://man.cx/sh
Bash: http://man.cx/bash

TL;DR: Bash는 다음의 상위 집합입니다.sh더 우아한 구문과 더 많은 기능을 사용합니다.Bash 셰방 라인은 현대 플랫폼에서 매우 보편적이기 때문에 거의 모든 경우에 사용하는 것이 안전합니다.

에서는 NB: 일부환서는에경sh Bash입니다.확인.sh --version.

이 질문은 종종 사용하려는 사람들을 위한 표준으로 지명되어 왔습니다.sh그리고 그것이 같은 행동을 하지 않는다는 것에 놀랐습니다.bash여기 일반적인 오해와 함정에 대한 간단한 개요가 있습니다.

먼저, 여러분은 무엇을 기대해야 하는지 이해해야 합니다.

  • 으로 스크립트를 sh scriptname로 실행할 수도 있습니다.scriptname그리고 가지고 있습니다.#!/bin/sh쉐방 라인에서, 당신은 POSIX를 기대해야 합니다.sh행동.
  • 으로 스크립트를 bash scriptname로 실행할 수도 있습니다.scriptname그리고 가지고 있습니다.#!/bin/bash(또는 로컬 동등한) 셰방 라인에서 Bash 동작을 예상해야 합니다.

일반적으로 올바른 셰방을 사용하고 스크립트 이름(상대 경로 또는 전체 경로)만 입력하여 스크립트를 실행하는 이 좋습니다.올바른 셰방 외에도 스크립트 파일에 실행 권한이 있어야 합니다.chmod a+x scriptname).

그렇다면, 그들은 실제로 어떻게 다를까요?

Bash는 본 셸 및 POSIX와 역호환되는 것을 목표로 하지만 많은 추가 기능이 있습니다.Bash 참조 매뉴얼에는 차이점을 열거하는 섹션이 있지만 일반적인 혼동의 원인은 다음과 같습니다.

  • [[는 서에사수없다에서 할 수 .sh, (계속)[그것은 더 투박하고 제한적입니다).참고 항목Bash의 단일 대괄호와 이중 대괄호의 차이
  • sh배열이 없습니다.
  • 는 "Bash 워는다같과습다니음드키"와 같습니다.local,source,function,shopt,let,declare,그리고.select 이식할 수 없습니다.sh)sh지원하는 구현(예: local.)
  • Bash에는 세 개의 인수와 같은 많은 C 스타일 구문 확장이 있습니다.for((i=0;i<=3;i++)) 고리,+=증분 할당 등$'string\nwith\tC\aescapes'기능은 POSIX에 대해 잠정적으로 허용됩니다(즉, 지금은 Bash에서 작동하지만 아직 지원되지 않음).sh현재 POSIX 사양만 준수하고 당분간은 그렇지 않을 가능성이 높은 시스템).
  • 는 Bash를 지원합니다.<<<'here strings'.
  • 바시가 가지고 있습니다.*.{png,jpg}그리고.{0..12}버팀대 확장
  • Bash는 다음과 같은 확장된 지구 온난화 시설을 가지고 있습니다.**(globstar하는 경우 및 ) 에 대해 사용합니다.extglob보다 다양한 와일드카드 구문을 사용할 수 있습니다.
  • ~ 는 Bash에서만 참조되며 보다 일반적으로 의 홈 디렉토리를 참조합니다.이것은 POSIX에 있지만 일부 POSIX 이전 버전에서는 누락되었을 수 있습니다./bin/sh실행.
  • Bash에는 프로세스 대체 항목이 있습니다.<(cmd)그리고.>(cmd).
  • 에는 Bash와 같은 의 편리한 이 있습니다.&|위해서2>&1 |그리고.&>위해서> ... 2>&1
  • 는 Bash와 공동 프로세스를 합니다.<>방향 변경
  • 와 같은 확장된 매개 변수 으로 합니다.${substring:1:2},${variable/pattern/replacement}사례 전환 등
  • Bash는 셸 연산을 위한 기능을 상당히 확장했습니다(부동점 지원은 아직 없음).의 유산이 .$[expression]되어야 하는 은 POSIX입니다.$((expression)) ( pre-POSIX 구문시 (POSIX 이의레거부일전pos)sh구현이 이를 지원하지 않을 수도 있습니다.)
  • 일부 내장 명령에는 다음과 같은 휴대용이 아닌 옵션이 있습니다.type -a,printf -v 다생년.echo -e.
  • 마법의 변수는 다음과 같습니다.$RANDOM,$SECONDS,$PIPESTATUS[@]그리고.$FUNCNAMEBash 확장입니다.
  • 는 Bash와 같은 일부 시스템 기능을 핸들로 합니다./dev/stdin,/dev/fd/<number>,/dev/tcp/<network address>,주요사항
  • 같은 통사적 차이 [ "x" == "y" ](export variable변수 할당 휴대용 문자열 비교와 분리되어야 함)[ ... ]단일 등호 사용).
  • 선택적 동작을 사용하거나 사용하지 않도록 설정하고 셸의 내부 상태를 표시하는 많은 수의 Bash 전용 확장입니다.
  • 그러나 스크립트 동작에 영향을 주지 않는 대화형 사용을 위한 많은 편의 기능.

기억하세요, 이것은 요약된 목록입니다.전체 스쿱은 참조 매뉴얼을 참조하고, 많은 유용한 해결 방법은 http://mywiki.wooledge.org/Bashism 을 참조하거나, 많은 Bash 전용 기능에 대해 경고하는 http://shellcheck.net/ 을 사용해 보십시오.

▁a가 있는 것입니다.#!/bin/bash 셰방라인, 하만그불도구사고용하럼에지,▁she사용bang고불구.sh scriptname스크립트를 실제로 실행할 수 있습니다.이게하 기로으모전용 Bash 기능비활므로어레사되다발니생합오류구 (에 이 됩니다.(쉐방 라인은 구문적으로 주석이므로 이 시나리오에서는 단순히 무시됩니다.)

안타깝게도 Bash는 다음과 같이 호출될 때 이러한 구성을 사용하려고 할 때 경고하지 않습니다.sh또한 모든 Bash 전용 기능을 완전히 비활성화하지는 않으므로 다음과 같이 호출하여 Bash를 실행합니다.sh스크립트가 //dashPOSIX 또는 Hereloom과 같은 변형으로 올바르게 이식 가능한지 확인하는 좋은 방법은 아닙니다.엄격한 POSIX 준수를 확인하려면 지정된 POSIX 모드를 사용해 보십시오(그러나 제대로 문서화되어 있지 않은 것 같습니다).

별도로 POSIX 표준화 노력은 을 포함하여 다양한 U*x와 유사한 플랫폼 동작을 지정하기 위한 것입니다.sh하지만 이 문서는 발전하는 문서이므로 일부 구현은 POSIX 사양의 이전 버전을 준수합니다. 게다가 POSIX를 준수하려고 시도조차 하지 않은 기존 구현도 있습니다.원래의 본 셸은 몇 가지 특이한 점이 있었는데, 나중에 POSIX 사양에 의해 정리되었으며, 이는 대부분 다음을 기반으로 합니다.ksh88(Bash 확장의 대부분은 다음과 같은 혁신적인 기능이기도 합니다.ksh.)

은 운영 체제의 서비스에 액세스하기 위한 사용자와 OS 간의 인터페이스입니다.GUI 또는 CLI(명령줄 인터페이스)일 수 있습니다.

sh(본 셸)는 유닉스/유닉스 계열 운영 체제를 위한 셸 명령줄 인터프리터입니다.일부 기본 제공 명령을 제공합니다.스크립트 언어에서 우리는 인터프리터를 다음과 같이 나타냅니다.#!/bin/sh그것은 bash(자유/열림), kash(자유가 아님)와 같은 다른 셸에 의해 가장 널리 지원되는 것 중 하나였습니다.

Bash(Bourne again 셸)는 Bourne 셸을 대체하는 셸입니다.Bash는 sh의 상위 집합입니다.Bash는 sh를 지원합니다. POSIX는 POSIX 호환 시스템의 작동 방식을 정의하는 표준 집합입니다.Bash는 실제로 POSIX 호환 셸이 아닙니다.스크립트 언어에서 우리는 인터프리터를 다음과 같이 나타냅니다.#!/bin/bash.

유추:

  • 셸은 인터페이스, 사양 또는 API와 같습니다.
  • sh는 Shell 인터페이스를 구현하는 클래스입니다.
  • Bash는 sh의 하위 클래스입니다.

enter image description here

UNIX.COM에서 게시

셸 피쳐

아래 표에는 셸을 다른 셸보다 선택할 수 있는 대부분의 기능이 나와 있습니다.이것은 최종 목록이 아니며 가능한 모든 셸에 대해 가능한 모든 기능을 포함하지 않습니다.기능은 운영 체제와 함께 제공되는 버전이거나 표준 배포에서 직접 컴파일된 기능으로 사용할 수 있는 경우에만 셸에 있는 것으로 간주됩니다.특히 아래에 명시된 C 셸은 SUNOS 4.*에서 사용할 수 있는 것으로, 현재 상당수의 공급업체가 tcsh 또는 자체 향상된 C 셸을 대신 배송합니다(항상 tcsh를 배송하는 것으로 명확하게 표시하지는 않습니다).

코드:

                                     sh   csh  ksh  bash tcsh zsh  rc   es
Job control                          N    Y    Y    Y    Y    Y    N    N
Aliases                              N    Y    Y    Y    Y    Y    N    N
Shell functions                      Y(1) N    Y    Y    N    Y    Y    Y
"Sensible" Input/Output redirection  Y    N    Y    Y    N    Y    Y    Y
Directory stack                      N    Y    Y    Y    Y    Y    F    F
Command history                      N    Y    Y    Y    Y    Y    L    L
Command line editing                 N    N    Y    Y    Y    Y    L    L
Vi Command line editing              N    N    Y    Y    Y(3) Y    L    L
Emacs Command line editing           N    N    Y    Y    Y    Y    L    L
Rebindable Command line editing      N    N    N    Y    Y    Y    L    L
User name look up                    N    Y    Y    Y    Y    Y    L    L
Login/Logout watching                N    N    N    N    Y    Y    F    F
Filename completion                  N    Y(1) Y    Y    Y    Y    L    L
Username completion                  N    Y(2) Y    Y    Y    Y    L    L
Hostname completion                  N    Y(2) Y    Y    Y    Y    L    L
History completion                   N    N    N    Y    Y    Y    L    L
Fully programmable Completion        N    N    N    N    Y    Y    N    N
Mh Mailbox completion                N    N    N    N(4) N(6) N(6) N    N
Co Processes                         N    N    Y    N    N    Y    N    N
Builtin artithmetic evaluation       N    Y    Y    Y    Y    Y    N    N
Can follow symbolic links invisibly  N    N    Y    Y    Y    Y    N    N
Periodic command execution           N    N    N    N    Y    Y    N    N
Custom Prompt (easily)               N    N    Y    Y    Y    Y    Y    Y
Sun Keyboard Hack                    N    N    N    N    N    Y    N    N
Spelling Correction                  N    N    N    N    Y    Y    N    N
Process Substitution                 N    N    N    Y(2) N    Y    Y    Y
Underlying Syntax                    sh   csh  sh   sh   csh  sh   rc   rc
Freely Available                     N    N    N(5) Y    Y    Y    Y    Y
Checks Mailbox                       N    Y    Y    Y    Y    Y    F    F
Tty Sanity Checking                  N    N    N    N    Y    Y    N    N
Can cope with large argument lists   Y    N    Y    Y    Y    Y    Y    Y
Has non-interactive startup file     N    Y    Y(7) Y(7) Y    Y    N    N
Has non-login startup file           N    Y    Y(7) Y    Y    Y    N    N
Can avoid user startup files         N    Y    N    Y    N    Y    Y    Y
Can specify startup file             N    N    Y    Y    N    N    N    N
Low level command redefinition       N    N    N    N    N    N    N    Y
Has anonymous functions              N    N    N    N    N    N    Y    Y
List Variables                       N    Y    Y    N    Y    Y    Y    Y
Full signal trap handling            Y    N    Y    Y    N    Y    Y    Y
File no clobber ability              N    Y    Y    Y    Y    Y    N    F
Local variables                      N    N    Y    Y    N    Y    Y    Y
Lexically scoped variables           N    N    N    N    N    N    N    Y
Exceptions                           N    N    N    N    N    N    N    Y

위 표의 키입니다.

Y 기능은 이 셸을 사용하여 수행할 수 있습니다.

셸에 N개의 피쳐가 없습니다.

F 기능은 셸 기능 메커니즘을 사용해야만 수행할 수 있습니다.

L 이 기능을 사용하려면 읽기 줄 라이브러리를 셸에 연결해야 합니다.

위 표의 참고 사항

  1. 이 기능은 원래 버전에는 없었지만 이후 거의 표준이 되었습니다.
  2. 이 기능은 상당히 새로운 기능이기 때문에 많은 버전의 셸에서는 찾아볼 수 없으며 점차 표준 분포로 전환되고 있습니다.
  3. 이 셸의 Vi 에뮬레이션은 많은 사람들이 불완전하다고 생각합니다.
  4. 이 기능은 표준이 아니지만 이를 수행하기 위한 비공식 패치가 있습니다.
  5. 'pdksh'라는 버전은 무료로 사용할 수 있지만 AT&T 버전의 전체 기능은 없습니다.
  6. 이 작업은 셸 프로그래밍 가능한 완료 메커니즘을 통해 수행할 수 있습니다.
  7. ENV 환경 변수를 통해 파일을 지정해야 합니다.

터미널

  • 창을 띄우는 프로그램
  • xterm, rxvt, konsole, kvt, gnome-terminal, nxterm 및 eterm.

껍데기

  • 터미널에서 실행되는 프로그램입니다.
  • 셸은 명령 인터프리터이자 프로그래밍 언어입니다.
  • 셸은 명령을 실행하는 매크로 프로세서입니다.
  • 매크로 프로세서는 텍스트와 기호가 확장되어 더 큰 표현을 만드는 기능을 의미합니다.

SH 대 BASH

SH

  • (SHELL)
  • 특정 셸입니다.
  • 명령어 통역기와 프로그래밍 언어
  • BASH의 전신

BASH

  • (본-어게인 쉘)
  • 특정 셸입니다.
  • 명령어 통역기와 프로그래밍 언어
  • 해시 기능 등
  • SH의 후계자
  • BASH는 기본 SHELL입니다.

참조 자료:

껍데기 gnu.org :

기본적으로 은 명령을 실행하는 매크로 프로세서입니다.매크로 프로세서라는 용어는 텍스트와 기호가 확장되어 더 표현을 만드는 기능을 의미합니다.

유닉스 셸은 명령 인터프리터이자 프로그래밍 언어입니다.명령 인터프리터로서 셸은 GNU 유틸리티의 풍부한 집합에 대한 사용자 인터페이스를 제공합니다.프로그래밍 언어 기능을 통해 이러한 유틸리티를 결합할 수 있습니다.명령을 포함하는 파일을 만들 수 있으며 명령 자체가 될 수 있습니다.이러한 새 명령은 /bin과 같은 디렉토리의 시스템 명령과 동일한 상태를 가지므로 사용자 또는 그룹이 사용자 지정 환경을 설정하여 공통 작업을 자동화할 수 있습니다.

셸은 대화식 또는 비 대화식으로 사용될 수 있습니다.대화형 모드에서는 키보드에서 입력한 입력을 허용합니다.비대화형으로 실행할 때 셸은 파일에서 읽은 명령을 실행합니다.

셸을 사용하면 GNU 명령을 동기식 및 비동기식으로 실행할 수 있습니다.셸은 더 많은 입력을 수락하기 전에 동기화 명령이 완료될 때까지 기다립니다. 비동기 명령은 추가 명령을 읽고 실행하는 동안 셸과 병렬로 계속 실행됩니다.리디렉션 구조를 사용하면 이러한 명령의 입력 및 출력을 세부적으로 제어할 수 있습니다.또한 셸을 통해 명령 환경의 내용을 제어할 수 있습니다.

셸은 또한 별도의 유틸리티를 통해 얻을없거나 불편한 기능을 구현하는 작은 내장 명령(빌트인) 세트를 제공합니다.예를 들어 cd, break, continue exec은 셸 자체를 직접 조작하므로 셸 외부에서 구현할 수 없습니다.history, getopts, kill 또는 pwd builtin 등은 별도의 유틸리티로 구현할 수 있지만 내장 명령어로 사용하는 것이 더 편리합니다.모든 셸 기본 제공 항목은 다음 섹션에서 설명합니다.

명령을 실행하는 것이 필수적이지만 셸의 대부분의 힘(및 복잡성)은 내장된 프로그래밍 언어 때문입니다.다른 고급 언어와 마찬가지로 셸은 변수, 흐름 제어 구조, 따옴표 및 함수를 제공합니다.

셸은 프로그래밍 언어를 확장하는 대신 대화형 사용을 위해 특별히 조정된 기능을 제공합니다.이러한 대화형 기능에는 작업 제어, 명령줄 편집, 명령 기록 및 별칭이 포함됩니다.이러한 각 기능은 이 설명서에 설명되어 있습니다.

BASH gnu.org :

Bash는 GNU 운영 체제의 셸 또는 명령어 통역기입니다.이 이름은 'Bourne-Again SHELL'의 약자로, 현재 유닉스 셸의 직계 조상의 저자인 Stephen Bourne에 대한 말장난으로 유닉스 7판 Bell Labs Research 버전에 등장합니다.

Bash는 sh와 크게 호환되며 Korn 셸 ksh 및 C 셸 csh의 유용한 기능을 통합합니다.이는 IEEE POSIX 사양(IEEE Standard 1003.1)의 IEEE POSIX 셸 및 도구 부분의 적합한 구현을 목적으로 합니다.대화형 및 프로그래밍 사용 모두에 대해 기능적으로 향상된 기능을 제공합니다.

GNU 운영 체제는 csh 버전을 포함한 다른 셸을 제공하지만 Bash가 기본 셸입니다.다른 GNU 소프트웨어와 마찬가지로 Bash는 휴대성이 뛰어납니다.현재 거의 모든 버전의 Unix와 몇 가지 다른 운영 체제에서 실행되며 MS-DOS, OS/2 및 Windows 플랫폼에 대해 독립적으로 지원되는 포트가 있습니다.

다른 답변들은 일반적으로 Bash와 POSIX 셸 표준의 차이점을 지적했습니다.그러나 휴대용 셸 스크립트를 작성하고 Bash 구문에 사용할 때는 일반적인 Bashism과 해당하는 순수 POSIX 솔루션 목록이 매우 유용합니다.이러한 목록은 Ubuntu가 기본 시스템 셸로 Bash에서 Dash로 전환할 때 컴파일되었으며 다음 사이트에서 찾을 수 있습니다. https://wiki.ubuntu.com/DashAsBinSh

게다가, 스크립트에서 바시즘을 확인하고 스크립트가 이식 가능한지 확인하고 싶을 때 유용한 체크배시즘이라는 훌륭한 도구가 있습니다.

거의 동일하지만 더 많은 기능이 있습니다.sh는 (더 ) 의더오부집래의 집합입니다bash.

sh종종 원본을 의미합니다.Bourne shell보다 앞선bash(Bourne *again* shell그러나 실제로는 1992년부터 POSIX 표준을 준수하는 교차 호환성이 높은 셸로 생각하는 것이 더 나을 수 있습니다.

로 시작하는 #!/bin/sh또는 를 사용합니다.sh셸은 일반적으로 하위 호환성을 위해 이를 수행합니다.unix/에는 "unix/linux OS"가 .sh Ubuntu »에서. 우분투sh 자주호니다합을 호출합니다.dash의 에고리 MacOS서버 입니다.bash이러한 셸은 표준 준수 동작, 속도 또는 이전 버전과의 호환성을 위해 선호될 수 있습니다.

bash원본보다 최신 버전입니다.sh많은 기능을 하고 더많 기하추고추호위구다니합을환성가은과 합니다.sh.sh 일적으프잘실행다니됩은램로그에서 잘 됩니다.bash.bash는 거의 할 수 있으며 됩니다. 단, 이 "" " " "/" " " " " " " " " (MacOS " " " " "로 설정되어 있습니다.zsh카탈리나 (10.15) 기준.으로 FreeB와 함께 .SD에는bash설치된.

/bin/sh동일한 프로그램을 실행할 수도 있고 실행하지 않을 수도 있습니다./bin/bash.

sh에서는 POSIX에 필요한 기능최소한 지원합니다(올바른 구현을 가정).확장도 지원할 수 있습니다.

bash Shell + 특정합니다."Bourne Again Shell"은 sh + bash 관련 확장에 필요한 기능을 구현합니다.전체 확장 집합은 여기서 설명하기에는 너무 길고 새 릴리스에 따라 다릅니다.차이점은 bash 매뉴얼에 설명되어 있습니다.info bash"배시 기능" 섹션(현재 버전의 섹션 6)을 읽거나 온라인으로 최신 설명서를 읽습니다.

가장 쉽게 설명할 수 있는 방법은 다음과 같습니다.

기본적인 이해를 한 후에, 다른 답들은 더 이해하기 쉬울 것입니다.

Shell - "Shell"은 사용자와 운영 체제(커널) 간의 상호 작용을 촉진하는 프로그램입니다.sh, Bash, C shell, Z shell 등 많은 셸 구현을 사용할 수 있습니다.

셸 프로그램을 사용하면 해당 셸 프로그램에서 지원하는 명령을 실행할 수 있습니다.

Bash - 본 어게인 셸에서 파생되었습니다.이 프로그램을 사용하면 셸에서 지정한 모든 명령을 실행할 수 있습니다.또한 이 프로그램에 특별히 추가된 몇 가지 명령을 실행할 수 있습니다.Bash는 sh와 이전 버전과의 호환성이 있습니다.

Sh - 본 셸에서 파생되었습니다. "sh"는 셸에 지정된 모든 명령을 지원합니다.즉, 이 프로그램을 사용하면 Shell에서 지정한 모든 명령을 실행할 수 있습니다.

자세한 내용은 다음을 참조하십시오.

Linux 운영 체제는 다양한 유형의 셸을 제공합니다.셸에는 많은 공통 명령이 있지만 각 유형에는 고유한 기능이 있습니다.주로 사용되는 조개껍질의 종류를 연구해 보겠습니다.

Sh 셸:

Sh 쉘은 Bourne 쉘로도 알려져 있습니다.Sh shell은 1977년 AT&T의 Bell Labs의 Stephen Bourne에 의해 Unix 컴퓨터용으로 개발된 최초의 셸입니다.많은 스크립팅 도구가 포함되어 있습니다.

배시 셸:

Bash 쉘은 Bourne Again Shell의 약자입니다.Bash 셸은 대부분의 Linux 배포판에서 기본 셸이며 Sh 셸을 대체합니다(Sh 셸도 Bash 셸에서 실행됨).Bash 셸은 대부분의 Sh 셸 스크립트를 수정 없이 실행할 수 있으며 명령줄 편집 기능도 제공합니다.

언급URL : https://stackoverflow.com/questions/5725296/difference-between-sh-and-bash

반응형