zsh에서는 소문자 UUID를 원한다고 가정해 보겠습니다. uuidgen
대문자를 반환하므로 다음과 같이 할 수 있습니다.
export MY_UUID=`uuidgen` # get uppercase UUID
export MY_UUID=${MY_UUID:l} # convert to lowercase
하지만 내가 정말로 원하는 것은:
${`uuidgen`:l} # does not work!
변수도 필요하지 않습니다. 그냥 출력하면 됩니다. 명령 출력을 즉시 가져와서 소문자로 바꾸는 방법을 찾을 수 없었기 때문에 이 변수를 만들었습니다.
한 단계로 명령의 소문자 출력을 얻을 수 있는 구문이 있습니까?
답변1
변수가 없어도 됩니다. 넌 할 수있어:
echo ${(L)$(uuidgen)} # nested parameter expansion
또는:
print ${$(uuidgen):l} # history modifiers
웹페이지 참조:
14.3.2 규칙
- 중첩된 대체 여러 개의 중첩된 ${...} 양식이 있는 경우 대체는 내부에서 바깥쪽으로 수행됩니다.
( man zshexpn
이것은 분명합니다):
위의 name 대신 ${...} 유형의 매개변수 표현식이나 $(...) 유형의 명령 대체를 사용하는 경우 먼저 확장된 후 그 결과가 name의 값인 것처럼 사용됩니다. 따라서 중첩된 작업을 수행하는 것이 가능합니다. ${${foo#head}%tail}은 tail'을 제거하는 동안 $foo 값을 대체합니다
head' and
. $(...) 형식은 일반적으로 아래에 설명된 플래그와 함께 사용됩니다. zshparam(1)의 배열 매개변수에 설명된 대로 매개변수 확장의 각 이름 또는 중첩된 ${...} 뒤에는 아래 첨자 표현식이 올 수도 있습니다.
다음 명령줄을 사용하여 가져옵니다.
$ LESS=+'/If a .* type parameter' man zshexpn
그리고 기록 수정자 확장( ${ … :l}
)의 경우(강조)zsh 문서(아래 발췌) man zshexpn
동일한 텍스트가 포함되어 있습니다.
14.1.4 수정자 선택적 단어 표시 뒤에 각각 앞에 ":"가 오는 다음 수정자 중 하나 이상의 시퀀스를 추가할 수 있습니다. 이들 수식어파일 이름 생성 및 매개변수 확장 결과도 처리합니다.