zstyle
둘 다 같은 일을 하거나 setopt
그 이상을 하는 것처럼 보이기 때문에 왜 둘 다 필요한지 이해할 수 없습니다 .
답변1
setopt
셸 옵션 설정
주택 옵션쉘 자체의 동작을 변경하는 부울 변수입니다. setopt
켜거나 끕니다. 인수 없이 실행 하여 setopt
어떤 셸 옵션이 기본값에서 전환되었는지 확인할 수 있습니다. 이들 중 일부는 런타임에 변경할 수 없습니다. 대신 그 목적은 셸의 내부 상태에 대한 정보를 제공하는 것입니다.
사용 가능한 셸 옵션은 셸에 따라 결정되며 직접 만들 수는 없습니다. 그러나 모든 셸 코드는 셸 옵션의 값을 읽고 그에 따라 자체 동작을 변경하도록 결정할 수 있습니다. 또한 쉘 함수 또는 실행 가능한 쉘 스크립트( source
d는 제외)는 주변 쉘의 나머지 부분에 영향을 주지 않고 로컬로 쉘 옵션을 변경할 수 있습니다.
zstyle
네임스페이스 속성 제공
zstyle [<flag>] ( <namespace> | <selector> ) <property> <value>
Zsh 전역 변수를 대체합니다. 그것은 쉘을 허용합니다암호(셸 자체가 아닌) 사용자가 설정을 구성하고 자신의 내부 상태를 저장할 수 있는 방법을 제공합니다.아니요실제 전역 변수로 쉘을 오염시킵니다.
셸 옵션과 달리 zstyle
속성은 로컬에서 수정할 수 없습니다. 대신 zstyle
네임스페이스와 선택기 시스템을 사용하세요. 속성을 읽을 때 zstyle
읽을 속성의 이름과 네임스페이스를 전달합니다. 그러나 언제환경zstyle
당신이 전달하는 속성글로벌 모드이는 CSS 선택기처럼 작동하여 여러 네임스페이스에 대해 동일한 속성을 동시에 설정할 수 있습니다. (CSS와의 이러한 유사성 때문에 여기서 "스타일"이라는 단어를 사용한 것 같습니다.)
네임스페이스에 어떤 구문을 사용하는지 는 zstyle
중요하지 않습니다. 레이어 구분자 로 사용됨 :
(Zsh에서 수행됨)완전한 시스템)는 단지 합의일 뿐입니다.
각 zstyle
속성은 문자열 배열을 저장합니다. 하지만:
속성을 설정할 때 이 플래그가 전달되면
-e
속성을 읽을 때 문자열이 코드로 평가되어 다음을 만들 수 있습니다.계산된 속성– 전역변수에서는 불가능합니다.zstyle
여러 가지 제공값을 가져오고 테스트하는 편리한 방법, 이러한 문자열 배열을 다른 유형으로 더 쉽게 변환할 수 있습니다.
답변2
역사를 살펴보면 도움이 됩니다.
zsh
1990년에 처음 출시되었습니다. Bourne Shell과 csh의 장점을 흡수합니다.
Bourne 쉘 튜닝은 단일 문자 옵션을 통해 수행되거나 특수 내장 옵션을 sh
사용할 수 있습니다 . 예를 들어 set
와일드카드를 비활성화한 상태로 sh -f
시작 sh
하거나 set -f
와일드카드를 비활성화한 상태로 실행합니다.
csh는 사용자가 설정하거나 설정 해제한 일반 변수로 조정되며, 그 중 일부는 시작 옵션에 매핑됩니다. 예를 들어, csh -x
수행 중인 모든 작업을 인쇄하는 모드에서 csh를 시작합니다. 또는 set verbose
실행 중에 모드에 들어갈 수도 있습니다( unset verbose
종료).
많은 zsh는 csh를 기반으로 합니다. 당시 csh가 인기 있는 쉘이었기 때문입니다. 여기서는 csh를 모방하지만 일반 변수를 사용하여 옵션 설정을 저장하는 것이 좋지 않다는 점을 인식하여 다른 옵션 네임스페이스를 사용하고 별도의 내장 기능을 사용하여 설정/설정 해제합니다. setopt
및 unsetopt
옵션은 단일 문자에 대한 매핑입니다. 옵션.
ksh
1980년대에는 일부 Bourne 옵션에 이름이 부여되어 설정 set -o optionName
(및 설정 해제 set +o
)이 가능했습니다.
1991년 zsh 2.0.02에서는 setopt
/ 가 / unsetopt
로 별칭이 지정되었습니다 .set -o
set +o
ksh
비교를 위해 bash
당시 옵션은 csh와 같은 일반 변수였으며 일부는 시작/ set
옵션에 매핑되었으며 일부 시작/ set
옵션은 해당 변수에 모두 매핑되지 않았습니다.
set -o option
1990년경 1.06에서 1.08 사이에 bash에 추가되었습니다.
Bash 2.0(1996)에서는 이러한 변수가 제거되고 shopt
대체 변수로 도입되었으므로 두 가지 옵션 세트가 있습니다. 일부는 set -o
/set set +o
이고 일부는 shopt -s
/set 입니다 shopt -u
. 왜 그런지 잘 모르겠습니다.
AFAIK, 1992년에 처음 출시되었을 때 set -o
이미 POSIX.2 사양에 있었습니다 . sh
그리고 모든 최신 Bourne 유사 쉘은 설정 옵션을 지원합니다. 비록 각 쉘의 옵션 목록이 POSIX에서 지정한 것 이상으로 다양하기 때문에( bash
위에서 언급한 두 번째 옵션 세트 참조) 저는 set -o
대신 Not setopt
self를 사용하는 경향이 있습니다.
zstyle
그 자체훨씬 나중에 추가됨compstyle
1999년, 선택적 모듈에서 zsh 함수로 작성된 이전 접근 방식을 C 일반화 및 재구현했습니다. 주요 사용 사례는 새로운 완성 시스템의 미세 조정을 허용하는 것이었고 여전히 그렇습니다(비록 다른 용도로 사용될 수 있고 사용되어 왔음에도 불구하고).
이는 셸 옵션, 변수 또는 함수와 독립적인 네임스페이스입니다. 셸 옵션이나 변수는 함수에 대해 로컬이 될 수 있지만 zstyle
s AFAIK는 항상 전역이므로 s를 사용하여 옵션이나 변수를 zstyle
다시 구현할 수는 없지만 그다지 가치가 있다는 의미는 아닙니다. 그럼에도 불구하고 set -o
/는 setopt
이전 버전과의 호환성을 위해 계속 유지되어야 합니다.