zsh보다 bash를 사용해야 할 이유가 있습니까? [닫은]


33

zsh 대신 bash를 실행하려는 이유가 궁금합니다. zsh는 bash와 완전히 호환됩니다. 나를 잘못 생각하지 마라 : 나는 bash 나 다른 것을 싫어하지 않는다. zsh보다 그것을 사용할 때 어떤 이점이 있는지 진정으로 알고 싶습니다.

zsh보다 bash를 사용해야하는 이유는 무엇입니까?


2
ZSH는 BASH와 완벽하게 호환되지 않습니다. ZSH에서는 배열 인덱싱이 1에서 시작합니다. BASH에서는 배열 인덱싱이 0에서 시작합니다. 다른 차이점도 있지만이 점을 지적하고 싶습니다.
Charles Addis

답변:


29

두 가지 이유가 생각납니다.

첫째, 거의 모든 곳에서 사용할 수 있습니다. zsh가 설치되지 않은 여러 Linux 시스템 (이 경우 CentOS 4.x)이 있습니다. 마찬가지로 Solaris 2.6 이상, HP-UX 10 이상 및 유사하게 삐걱 거리는 AIX 버전과 같은 고대 시스템을 다루어야합니다. 따라서 나는이 컴퓨터에서 bash를 사용해야합니다. 한 달 동안 수백 개가 아닌 수십 개의 개별 컴퓨터를 만지기 때문에 인터페이스가 일관성을 유지하기 위해 기본값.

둘째, 실제로 모든 곳에서 사용할 수 있습니다. 이것은 bash 쉘 스크립트를 작성할 수 있고 다른 곳으로 전송 될 때 작동한다는 것을 99 % 확신합니다.

그렇습니다. 이러한 이유는 표면적으로 동일하지만 그 이유는 다릅니다.


2
HPUX에 ksh88 / ksh93이 있다는 것을 기억합니다. 우리는 bash를 설치할 수 없었습니다.
Zlemini

24

배쉬는 일반적으로 모든 시스템과 함께 제공되며 zsh는 그렇지 않습니다. zsh를 좋아하지만이 때문에 zsh를 대화 형으로 사용하지만 Bash는 모든 스크립팅에 사용 합니다.

bash 호환 (setopt SH_WORD_SPLIT?)을 쇼핑 할 때도 여전히 미묘한 차이가 있기 때문에 이것이 모든 것을 더 간단하게 유지한다는 것을 알았습니다.


3
이것이 모든 GNU / 리눅스 시스템일까요?
andol

2
글쎄, OS / X 및 bsd와 함께 제공되는 것을 발견했습니다. 다른 * nix에 대한 경험이 많지 않습니다 (보통 버전).
Kyle Brandt

1
이전 Solaris 버전에는 bash가 포함되지 않았습니다. 나는 일반적으로 Bourne이 스크립팅을위한 쉘이되어야했습니다. 한동안은 그렇지 않았지만 일부 대기업에서는 여전히 문제가 발생할 수 있습니다.
user5336 2009

3
다른 BSD : s이어야합니다. 적어도 OpenBSD와 FreeBSD에서는 포트 / 패키지와 별도로 bash를 설치해야합니다.
andol

andol : 이것들은 내가 사용했던 것들입니다 .. 잘못 기억해야합니다. 그렇지 않으면 기억하지 않습니다.
Kyle Brandt

13

zsh는 bash와 완전히 호환되지 않습니다. 다양한 차이점이 있습니다. 최신 zsh는 bash (= ~ 지원, exec에 추가 플래그 옵션 등이 있음)와 더 호환되지만 "emulate"에서도 전체 호환성이 목표가 아닙니다.

예를 들어, bash 하위 문자열은 $ {foo : offset : len}이지만 zsh에서는 $ foo [start, end]이며 간단한 예입니다.

zsh는 tcsh 및 ksh에 영향을받는 쉘로 자체적으로 많은 작업을 수행합니다. POSIX 호환성은 명시 적으로 목표는 아니지만 개발자는 POSIX에 더 가까이 접근하는 옵션 / 모방 동작을 추가하는 패치에 반응합니다. 그러나 실제로 쉘의 기능을 시작하면 bash보다 쓰기 전용 스크립트를 작성하기 시작합니다.

bash는 POSIX sh + ksh + pedanticism이며 일부 기능은 이제 zsh에서 복사되었습니다. 쓰기 전용 스크립트도 있지만 강력한 연산자가 없기 때문에 zsh의 간결성을 사용하지 않고 결과를 더 읽을 있습니다 (공백 분할을 피하기 위해 모든 인용을 제외하고 바보 같은 ksh 스타일 $ array는 먼저 의미합니다) -배열 요소, 모든 요소 배열 등이 아님).

제한된 환경에 있지 않는 한 (예 : 일부 FS가 마운트되지 않은 시스템 rc 스크립트 작성 등) 쉘 중 하나의 기능을 최대한 활용하는 스크립트 작성은 현명하지 않습니다. 이상적으로, Perl / Python / Ruby / 무엇이든지 다른 사람들이 그것을 유지하기를 원한다면 Bourne sh에없는 표현력이 필요할 정도로 큰 것을 사용하십시오. 대화식 쉘 (탭 완성 프로그래밍 등)에 관련된 쉘 항목을 유지하십시오.

zsh보다 bash를 사용하지 않습니다. 간단한 스크립트를 위해 zsh 대신 bare sh를 사용하거나 연관 배열에 적절한 연산자가있는 언어로 전환합니다 (zsh와 달리 '간결한'). 나는 수도 나는 하나 개의 작은 기능은 기존의 검증 된 가공 스크립트를 확장하고 지금 다시 할 시간이없는 것을 필요로하는 경우 배쉬에 쉬 스크립트를 전환합니다.


6
nb : 호환성을 위해 $ {foo : offset : len} zsh에서 지원됩니다.
Phil P

6

내 충고 : 절대 이식성을 원한다면 Bourne 쉘 규칙을 사용하여 작성하고 Korn 쉘 확장을 방해하지 마십시오. 언급했듯이, GNU 쉘이 전혀없는 오래된 "큰 상자"입니다.

배쉬는 이미 "너무 많이"합니다. 직장에서 zsh를 선호하는 친구가 있지만 정확히 무엇을하는지 모르겠습니다.

어쨌든 Bourne (또는 "bourne again") 셸을 쓰거나 소수의 특정 상자에 대한 사용자 지정 스크립트를 수행하는 경우 "shell hell"을 완전히 건너 뛰고 perl 또는 python (또는 기타 가장 좋아하는 지역 통역사가 있습니다).


5

위에 제공된 이식성 이유 외에도 bash가 여전히 기능을 추가하고있을 수 있습니다.

예를 들어 bash v4.x + 는 다음을 도입했습니다.

  • 재귀 globbing :

    rm -f ** / *. log

  • autocd :

    "cd / tmp"대신 "/ tmp"를 입력하십시오.


2
zsh의 bash 복사 기능은 bash를 사용하는 이유는 무엇입니까?
qqx

5

그건 그렇고, 여기에서 bash가 실제로 모든 곳에서 발견된다는 말을 여러 번 들었습니다.이를 사용하여 이식 가능한 스크립트를 작성하십시오.

무의미한 말. 관심있는 모든 시스템에 BASH가 있다는 것을 알고 있다면 완벽하게 합리적입니다. BASH에는 POSIX sh에서 합리적으로 에뮬레이션 할 수없는 많은 유용한 기능이 있습니다. POSIX 이외의 기능을 많이 사용하는 것은 좋은 생각은 아니지만 실제로 필요할 때 사용하는 것이 좋습니다.

이식성이 절대적인 것은 아닙니다. 다른 것과 마찬가지로 얼마나 멀리 가야하는지 논란의 여지가 있습니다. 예를 들어, Fedora는 RPM 패키지를 빌드하기 위해 쉘 명령을 사용하고 Fedora 패키징 지침은 모든 패키지가 Fedora에서 기본적으로 빌드되어야하므로 BASH의 모든 기능을 사용하는 것이 좋습니다. 이론적으로 BASH가없는 다른 배포판에서 소스 RPM을 재사용하고 싶을 수도 있지만 "ALWAYS UZE POSIX !! 1"만트라 대신 실용성을 기반으로 이식성에 대한 결정을 내 렸습니다.

ZSH는 단순히 반쯤 구운 아이디어의 엉망으로 인해 기본 쉘로 잡히지 않았습니다.


2
zsh에서 어떤 기능이나 아이디어가 절반으로 구워졌으며 그 이유를 설명 할 수 있습니까?
funroll

2

그런데, 여기에 여러 번 들었습니다 bash그래서 휴대용 스크립트를 작성하는 데 사용, 실질적으로 모든 곳에서 발견을 false입니다 .

휴대용 유닉스 스크립트를 작성하는 올바른 방법 은 모든 * nix 시스템에서 볼 수있는 사용 sh하는 것 입니다 .

제외한 다른 모든 쉘 sh은 일상적인 대화식 도구입니다.

오는 때 bashzsh- bash더에 번들로 제공되는 *nixes것보다 zsh, 그래서 여기에 시스템에 추가 소프트웨어를 설치하는 단점이 온다 - 당신은 그것을 유지해야합니다. 어떤 사람들은 zsh "멋진 기능"을 좋아하기 때문에 그 가격을 지불하는 것을 좋아합니다.


2
sh의 많은 현대 구현은 bash에 대한 링크 일뿐입니다.
user9517은 GoFundMonica를 지원합니다.

2
@Iain Ubuntu는 기본적으로 대시 를 사용하며 shbash 인 경우에도 로 실행할 때 호환성 모드를 활성화합니다 sh.
mgorven

2

다른 요점 :

많은 프로그램이 기본적으로 멋진 bash 완성을 제공합니다. 나를 위해 그것은 전환하지 않는 이유입니다.

[2013 년 7 월에 추가됨] 위의 의견 이후 몇 년 동안 zsh를 사용한 후에도 탭 완성 (내장 된 1 개, 제 3의 비어있는 수정 사항이 없음)이 훌륭하고 bash가 제공하는 것보다 훨씬 멀리 보인다고 말해야합니다. . :).


3
ZSH에서 탭 완성과 함께 ZSH에서도 작동한다고 생각합니다. 많은 프로그램 관련 인수를 얻습니다 ...
Kyle Brandt

흥미 롭군 bash 완성 파일이 zsh와 함께 작동하거나 일부 프로그램에 zsh 특정 완성 항목이 있다고 말하고 있습니까? 여전히 zsh가 자동으로 고려하거나 고려하지 않는 bash 완성 파일의 std 레이아웃이 있습니다. 작동하도록 zsh 구성을 조정 했습니까?
Wojciech Kaczmarek

@Wojciech Kaczmarek : 19.3을 zsh.sourceforge.net/Doc/Release/zsh_19.html 에서 원한다고 생각합니다 . 솔직히, 나는 그것을 실제로 이해하는 데 시간이 걸리지 않았습니다. 온라인에서 찾은 .zshrc를 찢어 버렸습니다. :-) 그러나 apt, grep 등과 같은 프로그램에서 명령 줄 인수를 완료합니다 ...
Kyle Brandt

5
bash의 탭 완성은 zsh의 이전 탭 완성 시스템과 매우 유사합니다. 이것은 zsh에서 bash로 복사 된 아이디어 중 하나입니다 (bash는 zsh로 복사 된 아이디어가 있습니다). "bashcompinit"를 실행 한 다음 zsh 내에서 "complete"및 / 또는 "compgen"명령을 사용하여 zsh에서 bash 용으로 작성된 완료 스크립트를 사용할 수 있습니다. bash 기능은 zsh 및 에뮬레이션 할 수 있습니다. 명령이 bash 완료와 함께 제공되므로 bash로 전환 할 이유가 없습니다.
Phil P
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.