나는 한동안 Bash를 사용해 왔습니다. 이제 다른 쉘도 하나 더 배우고 싶어서 콘 쉘을 선택하게 되었습니다. 그러나 Ksh에는 거의 20년 동안 주요 업데이트가 없었던 것 같습니다. 그리고 Zsh에 Ksh의 기능이 통합되어 있다는 내용을 읽은 적이 있습니다. StackExchange 네트워크에서 많은 쉘 비교 질문을 읽었지만 이에 대한 답을 찾지 못했습니다.Zsh에 통합되지 않은 Korn Shell의 기능이 있습니까?그렇다면 그것들은 무엇입니까?
답변1
그에 따르면 ksh에는 있지만 zsh에는 없는 유일한 기능은 다음과 같습니다.명명된 매개변수사용자 정의 "유형"의 경우. 특히 모호한 기능에 대해서는 해당 기사가 완전한 목록이 아니기 때문에 다른 기사가 있을 수도 있습니다.
다른 방향으로 가면 귀하의 질문에 대한 답변이 책 한 권을 채울 수 있습니다(아마도이 하나).
Zsh에는 ksh에는 없는 많은 기능이 있습니다. 몇 가지 인기 있는 것은 다음과 같습니다.명령 스택,디렉토리 스택,기록 공유그리고프롬프트.
- 명령 스택명령을 입력하고 다른 명령을 먼저 실행해야 한다는 것을 깨닫는 경우입니다. 현재 행을 명령 스택으로 보내고 다른 명령을 실행한 다음 스택에서 해당 명령을 팝하면 됩니다. 이 작업은 여러 번 수행할 수 있습니다. (zsh는 이것을 제공하는 내가 아는 유일한 쉘입니다).
- 디렉토리 스택(일명
pushd
/popd
)는 디렉토리로 연속적으로 변경한 다음 역순으로 다시 CD를 사용하려는 경우입니다. (Bash를 포함하여 많은 쉘이 이를 제공합니다). - 역사 공유모든 열린 쉘이 단일 공통 기록을 공유하는 곳입니다. 한 창에서 명령을 실행하고 다른 창으로 전환하면 기록에서 해당 명령을 사용할 수 있습니다.
- 프롬프트올바른 정렬을 제외하고는 프롬프트와 같습니다. 많은 사람들이 에
cwd
or 를 넣는 것을 좋아합니다 .date
rprompt
다음은 zsh에 관한 Stack Exchange 사이트에 대한 토론입니다.
답변2
SVR4에 포함된 가장 유명한 변형인 ksh88은 언어가 bash
대부분 부분적으로 복제된 하나의 pdksh를 기반으로 하며 POSIX 사양의 기반이 되는 하위 집합은 sh
(일부 버그 수정 및 POSIX 정렬을 제외하고) 많이 발전하지 않았습니다. 1993년 5월(ksh88i)의 마지막 릴리스 이후.
그러나 David Korn이 재작성하여 1993년 12월에 처음 출시된 ksh93은 2014년경까지 활발한 개발이 진행되었으며 소스 코드는 다음과 같습니다.해방됨마지막 공식 릴리스인 ksh93u+는 2012년 8월에 만들어졌으며(질문을 한 지 불과 몇 주 만에) 원래 작성자가 만든 후 2014년에 "베타" 릴리스(ksh93v-)가 만들어졌습니다. 많은 새로운 기능으로 AT&T에 의해 중복됩니다.
ksh93v를 기반으로 코드를 현대화하고 개발을 계속하려는 커뮤니티의 노력이 있어 ksh2020이 탄생했지만그 노력은 이제 포기되었습니다. ㅏksh93u+를 유지하기 위한 별도의 노력그 이후에도 마찬가지인 것 같다. 동안새로운 것 (ksh93u+m)지금은 좀 더 유망해 보입니다.
ksh93은 쉘 그 이상입니다. 이는 동일한 코드 중 일부를 재사용하여 여러 유틸리티와 함께 개발되었으며, 비지박스와 비슷한 ksh93에 내장될 수 있습니다.
그것은 더 많은 것이었습니다.연구노력은 종종 실험적인 것으로 간주되며 문서화가 매우 부족합니다.
ksh93 은 zsh
무엇보다도 강력한 대화형 셸로 개발되었지만 ksh93은 프로그래밍 언어에 더 중점을 두었습니다. 예 perl
를 들어 유사한 카테고리에 속한다는 목표를 가지고 언어와 최적화에 많은 노력이 있었습니다 python
.
ksh93에는 없는 zsh의 많은 기능이 있고 둘 다 서로의 기능을 빌린 것처럼 ksh93에는 zsh에 없는 많은 기능이 있습니다. 많은 공통 기능이 있으며 둘 다 수행할 수 있지만 방식이 매우 다릅니다.
ksh93에는 있지만 zsh에는 없는 기능 중 하나는 다음과 같습니다.
- ast-open의 모든 내장: ast-open의 일부로 구축되면 , , , , , ...
ksh93
와 같은 일부 표준 유틸리티의 향상된 버전을 포함하여 zsh에 없는 많은 내장 기능이 있습니다. (zsh에는 일부 기능이 있지만 자체 내장 기능 또는 언어 기능의 기능). 그게 다야date
join
head
tr
uniq
wc
최적화사물의 측면.perl
어떤 일을 하기 위해 프로세스를 분기해야 한다면 -like를 할 수 없습니다 . - 비분할 명령 대체(
$(...)
) 및 서브쉘 환경을 생성하지 않는 명령 대체${ ...; }
. - 다차원 배열:
a=((a b) (c d))
- 객체 지향 프로그래밍 기능(유형, 구조, 분야, 방법...)
- 변수 및 옵션에 대한 정적 범위 지정( 변수에는
zsh
있지만private
옵션에 대한 정적 범위 지정은 없음) - 이름 참조(정적 범위 지정 및 객체 프로그래밍 구조가 있는 셸에는 필수적이며 zsh 또는 bash와 같은 동적 범위 지정이 있는 쉘에는 중요하지 않음)
- 자연어, crontab, iso 형식
printf
및date
내장 기능을 포함한 날짜/시간 조작(zsh
은strftime
이에 비해 매우 제한적입니다). - 몇 가지 유용한 리디렉션 연산자(
<#((...))
검색,<>;
덮어쓰기 및 자르기...). - 네임스페이스
- 작업 풀 및 coshell.
- CSV/URI/HTML-엔티티/base64 인코딩/디코딩.
- ksh93v의 json 인코딩/디코딩 - 다른 도구가 이해할 수 있는 형식으로 고급 데이터 구조를 (역)직렬화합니다(버그가 많음, ksh2020에서 제거됨).
$"..."
메시지 현지화를 위해/dev/tcp
,/dev/udp
( UNIX 도메인 소켓의 경우 , 있지만 UDP는 없음zsh
)ztcp
zsocket
dtksh
90년대 CDE에 포함된 ksh93에 X 툴킷 기능을 추가하는 쉘 도 있었습니다 .- 거기
shcomp
에엮다KSH 코드.