setopt와 zstyle의 다른 용도는 무엇입니까?

setopt와 zstyle의 다른 용도는 무엇입니까?

zstyle둘 다 같은 일을 하거나 setopt그 이상을 하는 것처럼 보이기 때문에 왜 둘 다 필요한지 이해할 수 없습니다 .

답변1

setopt셸 옵션 설정

주택 옵션쉘 자체의 동작을 변경하는 부울 변수입니다. setopt켜거나 끕니다. 인수 없이 실행 하여 setopt어떤 셸 옵션이 기본값에서 전환되었는지 확인할 수 있습니다. 이들 중 일부는 런타임에 변경할 수 없습니다. 대신 그 목적은 셸의 내부 상태에 대한 정보를 제공하는 것입니다.

사용 가능한 셸 옵션은 셸에 따라 결정되며 직접 만들 수는 없습니다. 그러나 모든 셸 코드는 셸 옵션의 값을 읽고 그에 따라 자체 동작을 변경하도록 결정할 수 있습니다. 또한 쉘 함수 또는 실행 가능한 쉘 스크립트( sourced는 제외)는 주변 쉘의 나머지 부분에 영향을 주지 않고 로컬로 쉘 옵션을 변경할 수 있습니다.

zstyle네임스페이스 속성 제공

zstyle [<flag>] ( <namespace> | <selector> ) <property> <value>Zsh 전역 변수를 대체합니다. 그것은 쉘을 허용합니다암호(셸 자체가 아닌) 사용자가 설정을 구성하고 자신의 내부 상태를 저장할 수 있는 방법을 제공합니다.아니요실제 전역 변수로 쉘을 오염시킵니다.

셸 옵션과 달리 zstyle속성은 로컬에서 수정할 수 없습니다. 대신 zstyle네임스페이스와 선택기 시스템을 사용하세요. 속성을 읽을 때 zstyle읽을 속성의 이름과 네임스페이스를 전달합니다. 그러나 언제환경zstyle당신이 전달하는 속성글로벌 모드이는 CSS 선택기처럼 작동하여 여러 네임스페이스에 대해 동일한 속성을 동시에 설정할 수 있습니다. (CSS와의 이러한 유사성 때문에 여기서 "스타일"이라는 단어를 사용한 것 같습니다.)

네임스페이스에 어떤 구문을 사용하는지 는 zstyle중요하지 않습니다. 레이어 구분자 로 사용됨 :(Zsh에서 수행됨)완전한 시스템)는 단지 합의일 뿐입니다.

zstyle속성은 문자열 배열을 저장합니다. 하지만:

  • 속성을 설정할 때 이 플래그가 전달되면 -e속성을 읽을 때 문자열이 코드로 평가되어 다음을 만들 수 있습니다.계산된 속성– 전역변수에서는 불가능합니다.

  • zstyle여러 가지 제공값을 가져오고 테스트하는 편리한 방법, 이러한 문자열 배열을 다른 유형으로 더 쉽게 변환할 수 있습니다.

답변2

역사를 살펴보면 도움이 됩니다.

zsh1990년에 처음 출시되었습니다. Bourne Shell과 csh의 장점을 흡수합니다.

Bourne 쉘 튜닝은 단일 문자 옵션을 통해 수행되거나 특수 내장 옵션을 sh사용할 수 있습니다 . 예를 들어 set와일드카드를 비활성화한 상태로 sh -f시작 sh하거나 set -f와일드카드를 비활성화한 상태로 실행합니다.

csh는 사용자가 설정하거나 설정 해제한 일반 변수로 조정되며, 그 중 일부는 시작 옵션에 매핑됩니다. 예를 들어, csh -x수행 중인 모든 작업을 인쇄하는 모드에서 csh를 시작합니다. 또는 set verbose실행 중에 모드에 들어갈 수도 있습니다( unset verbose종료).

많은 zsh는 csh를 기반으로 합니다. 당시 csh가 인기 있는 쉘이었기 때문입니다. 여기서는 csh를 모방하지만 일반 변수를 사용하여 옵션 설정을 저장하는 것이 좋지 않다는 점을 인식하여 다른 옵션 네임스페이스를 사용하고 별도의 내장 기능을 사용하여 설정/설정 해제합니다. setoptunsetopt옵션은 단일 문자에 대한 매핑입니다. 옵션.

ksh1980년대에는 일부 Bourne 옵션에 이름이 부여되어 설정 set -o optionName(및 설정 해제 set +o)이 가능했습니다.

1991년 zsh 2.0.02에서는 setopt/ 가 / unsetopt로 별칭이 지정되었습니다 .set -oset +oksh

비교를 위해 bash당시 옵션은 csh와 같은 일반 변수였으며 일부는 시작/ set옵션에 매핑되었으며 일부 시작/ set옵션은 해당 변수에 모두 매핑되지 않았습니다.

set -o option1990년경 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 setoptself를 사용하는 경향이 있습니다.

zstyle그 자체훨씬 나중에 추가됨compstyle1999년, 선택적 모듈에서 zsh 함수로 작성된 이전 접근 방식을 C 일반화 및 재구현했습니다. 주요 사용 사례는 새로운 완성 시스템의 미세 조정을 허용하는 것이었고 여전히 그렇습니다(비록 다른 용도로 사용될 수 있고 사용되어 왔음에도 불구하고).

이는 셸 옵션, 변수 또는 함수와 독립적인 네임스페이스입니다. 셸 옵션이나 변수는 함수에 대해 로컬이 될 수 있지만 zstyles AFAIK는 항상 전역이므로 s를 사용하여 옵션이나 변수를 zstyle다시 구현할 수는 없지만 그다지 가치가 있다는 의미는 아닙니다. 그럼에도 불구하고 set -o/는 setopt이전 버전과의 호환성을 위해 계속 유지되어야 합니다.

관련 정보