zsh에서 :t의 의미

zsh에서 :t의 의미

이것은 아마도 zsh 매뉴얼에 있을 것입니다. 게으르고 여기에 질문해서 죄송합니다. 다음 예에서 볼 수 있듯이 zsh의 :t에는 뭔가 특별한 것이 있는 것 같습니다.

% x=foo
% echo $x:bar
foo:bar
% echo $x:toad
foooad

동작은 $x:bar예상된 동작이지만 :t백스페이스로 나타나는 것 같습니다. 누군가가 이 문제를 논의하는 설명서의 해당 섹션으로 안내해 줄 수 있습니까? 감사해요!

답변1

:t수정자

t [ digits ]
모든 선행 경로 이름 구성 요소를 제거하고 마지막 구성 요소(후행 구성 요소)만 남깁니다. 이것은 " "와 같습니다 basename. 모든 후행 슬래시를 제거하여 시작하십시오. 소수는 위의 (h)와 같은 방식으로 처리되지만 이 경우 기본값 1 대신 후행 구성 요소의 수가 유지됩니다. 0은 1과 같은 방식으로 처리됩니다.

% x=/foo/bar/baz
% echo $x:toad 
bazoad
% echo $x:t
baz
% echo ${x:t2}
bar/baz

( :t, csh의 경우 1990년부터 사용되었으며 :t2변형은 다음과 같습니다.2019년에 추가됨버전 5.8에서 처음 사용 가능).

답변2

이것은 수정자입니다. variable:modifier변수가 확장될 때 수정될 수 있도록 합니다. 귀하의 경우 더 명확하게하려면 다음을 수행하십시오.

echo ${x:t}bar

에서 모든 선행 경로 이름 구성 요소를 제거합니다 x. (설정해 보세요 x=/usr/bin/foo!)

솔직히 말해서 나 자신을 훈련시키려고 노력해요안 돼요문자열에 "raw"를 사용하십시오 $variable- 합병증의 위험이 너무 높습니다( x=foo; xy=bar, echo $xyz...). 그렇게 하면 echo ${x}:toad쉘이 원하는 것보다 더 똑똑해질 위험이 제거됩니다.

관련 정보