TL; DR :zsh
Ksh / Bash의 "${!varnamepfx@}"
확장 과 동등한 것이 있습니까?
예를 들어 다음과 같은 변수가있는 경우 set
:
[...]
foo='random value'
bar=$'amazing\n value'
baz='that other value'
[...]
그런 다음 printf -- %s\\n "${!ba@}"
Bash에서 요청하면 다음을 얻습니다.
bar
baz
나는 정독했습니다 zsh
매뉴얼을 하지만 수 없었던 것이 아무것도 찾을 수 위의 구문처럼 직접합니다. 내가 의지 할 수있는 최선의 방법은 다음과 같은 중첩 확장입니다.
(위의 예)
printf -- %s\\n "${(M)${${(f)$(set)}[@]%%=*}[@]:#ba*}"
작업을 안정적으로 수행하는 것처럼 보이지만 (적어도 MacOS Catalina의 zsh v5.3에서는) 상당히 복잡해 보이며 $(set)
거기에 있는 명령 대체가 실제로 프로세스를 생성 하는지 아니면 zsh
.
물론, 저는 지금까지 Completion System을 통해 그 일을 완료하는 것을 배제했습니다 (따라서 조사하지 않았습니다).
$parameter
특수 연관 배열 의 키와 일치하는 또 다른 옵션 은 I
아래 첨자 플래그 를 사용하는 것입니다 .
$ print -rC1 - $parameters[(I)ba*]
bar
baz
이는 목록 / 배열을 생성 하는 연관 배열 연산자이고 @ Gille 's ${(kM)parameters:#ba*}
는 연관 배열의 키에 적용되는 목록 / 배열 연산자 로 목록 / 배열도 생성합니다. 이 경우 최종 결과는 본질적으로 동일합니다.
당신은 단지 하나를 기억하고있는 경우 ${(M)array:#pattern}
어느 grep
것이 더 일반적이다로 -for-배열은 더 유용 하나입니다. 배열 첨자 플래그 와 비교할 때 할 수없는 일은 키에서 일치하고 해당 값을 반환하거나 값에서 일치하고 해당 키를 반환하는 것입니다.
다음과 같이 두 가지를 결합 할 수 있습니다.
$ print -rC1 - ${(Mk)parameters[(R)array*]:#pa*}
path
patchars
여기로 시작하는 배열의 이름으로 돌아갑니다 pa
( 값 의 $parameters
에 대해 일치 array*
와 키 에 대한을 pa*
).
물론, 당신의 모든 것을 할 수 zsh
의 성찰 변수를 ( $aliases
, $commands
, $functions
, $builtins
, $modules
, $history
...)
그들 중 일부를 들어, 당신은 또한 쿼리 사용 할 수 있습니다 -m pattern
상응하는 내장의 (일치) 옵션을 ( whence -m
, alias -m
, autoload -m
, fc -m
...)하지만, 대한 등 bash
의 compgen
, 당신은 안정적으로 사후 처리는 그것의 그들의 출력하면서 라인 기반 수 없습니다 그들이보고하는 것 중 일부는 개행 문자를 포함 할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다