배쉬에서:
foo_a=1
foo_b=2
declare -p ${!foo_*}
산출:
declare -- foo_a="1"
declare -- foo_b="2"
나는 무엇을 해야 합니까?다루기 힘든?
위의 내용을 붙여 넣지 않겠습니까?다루기 힘든변수설정도 못하나요? 붙여넣은 모든 코드가 성공하지 않으면 코드 조각을 붙여넣어도 아무런 효과가 없는 것 같나요? 그게 문제야?
답변1
다음으로 시작하는 모든 매개변수를 인쇄하는 방법
foo
:declare -p ${(Mk)parameters:#foo*}
parameters
모든 변수는 연관 배열 에 저장되므로(k)
모든 키를 인쇄하고 패턴을 검색하는 것으로 충분합니다foo*
. 이 플래그는(M)
일치하지 않는 요소를 제거하기 위해 존재합니다.산출:
typeset foo_a=1 typeset foo_b=2
(참고,
declare
와 동일typeset
).
최근 도입된 기능으로 인해 붙여넣기가 예상대로 작동하지 않습니다.괄호 안에 붙여넣기:
zle_bracketed_paste
많은 터미널 에뮬레이터에는 텍스트를 정상적으로 입력하는 대신 터미널에 붙여넣을 때 응용 프로그램이 이를 인식할 수 있도록 하는 기능이 있습니다. ZLE의 경우 이는 편집기 명령을 호출하지 않고도 탭 및 줄 바꿈과 같은 특수 문자를 삽입할 수 있음을 의미합니다. 또한 붙여넣은 텍스트는 단일 실행 취소 이벤트를 형성하며 해당 영역이 활성화된 경우 해당 영역을 대체합니다.
이 두 요소 배열에는 기능을 활성화 및 비활성화하는 데 사용되는 터미널 이스케이프 시퀀스가 포함되어 있습니다. 이러한 이스케이프 시퀀스는 ZLE가 활성화될 때 대괄호 붙여넣기를 활성화하고 다른 때에는 비활성화하는 데 사용됩니다. 이 매개변수를 설정 해제하면 괄호 안에 붙여넣기가 비활성화된 상태로 유지됩니다.
마음에 들지 않으면 설정을 해제하세요.
unset zle_bracketed_paste
답변2
@jimmij는 일반적으로 연관 배열의 각 키에 대한 패턴 일치를 인쇄하는 데 작동하는 훌륭한 답변을 제공했습니다.
그러나 환경 변수에 관한 한 zsh
이 명령을 사용하는 내장 솔루션이 있다는 것을 읽으면서 발견했습니다.typeset
man 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 )