zsh에서 foo로 시작하는 모든 변수를 인쇄합니다.

zsh에서 foo로 시작하는 모든 변수를 인쇄합니다.

배쉬에서:

foo_a=1
foo_b=2
declare -p ${!foo_*}

산출:

declare -- foo_a="1"
declare -- foo_b="2"

나는 무엇을 해야 합니까?다루기 힘든?

위의 내용을 붙여 넣지 않겠습니까?다루기 힘든변수설정도 못하나요? 붙여넣은 모든 코드가 성공하지 않으면 코드 조각을 붙여넣어도 아무런 효과가 없는 것 같나요? 그게 문제야?

답변1

  1. 다음으로 시작하는 모든 매개변수를 인쇄하는 방법 foo:

    declare -p ${(Mk)parameters:#foo*}
    

    parameters모든 변수는 연관 배열 에 저장되므로 (k)모든 키를 인쇄하고 패턴을 검색하는 것으로 충분합니다 foo*. 이 플래그는 (M)일치하지 않는 요소를 제거하기 위해 존재합니다.

    산출:

    typeset foo_a=1
    typeset foo_b=2
    

    (참고, declare와 동일 typeset).


  1. 최근 도입된 기능으로 인해 붙여넣기가 예상대로 작동하지 않습니다.괄호 안에 붙여넣기:

    zle_bracketed_paste

    많은 터미널 에뮬레이터에는 텍스트를 정상적으로 입력하는 대신 터미널에 붙여넣을 때 응용 프로그램이 이를 인식할 수 있도록 하는 기능이 있습니다. ZLE의 경우 이는 편집기 명령을 호출하지 않고도 탭 및 줄 바꿈과 같은 특수 문자를 삽입할 수 있음을 의미합니다. 또한 붙여넣은 텍스트는 단일 실행 취소 이벤트를 형성하며 해당 영역이 활성화된 경우 해당 영역을 대체합니다.

    이 두 요소 배열에는 기능을 활성화 및 비활성화하는 데 사용되는 터미널 이스케이프 시퀀스가 ​​포함되어 있습니다. 이러한 이스케이프 시퀀스는 ZLE가 활성화될 때 대괄호 붙여넣기를 활성화하고 다른 때에는 비활성화하는 데 사용됩니다. 이 매개변수를 설정 해제하면 괄호 안에 붙여넣기가 비활성화된 상태로 유지됩니다.

    마음에 들지 않으면 설정을 해제하세요.

    unset zle_bracketed_paste
    

답변2

@jimmij는 일반적으로 연관 배열의 각 키에 대한 패턴 일치를 인쇄하는 데 작동하는 훌륭한 답변을 제공했습니다.

그러나 환경 변수에 관한 한 zsh이 명령을 사용하는 내장 솔루션이 있다는 것을 읽으면서 발견했습니다.typesetman zshbuiltins

typeset옵션을 사용 -m하고 제공 하면 됩니다 .따옴표로 묶어서일치시키려는 매개변수 이름의 패턴입니다.

패턴과 일치하는 환경 변수 인쇄

  • 변수 이름만:

    typeset +m 'foo*'
    
    foo
    foo_fighters
    food
    
  • 변수 이름 및 할당:

    typeset -m 'foo*'
    
    foo=bar
    foo_fighters=awesome
    food=(my life)
    
  • 조판 플래그, 변수 이름 및 지정된 값

    typeset -p -m 'foo*'
    
    typeset foo=bar
    typeset foo_fighters=awesome
    typeset -a food=( my life )
    

관련 정보