foo.md.md
(이중 접미사가 붙은 이유는 분명해질 것입니다)라는 파일이 있다고 가정해 보겠습니다 .
$ print *.md(om[1]) # Get the most recent .md file
foo.md.md
$ print *.md(om[1]:r) # Strip the suffix
foo.md
$ print *.md(om[1]:r).docx # Try to add a suffix -- oops that doesn't work
zsh: no matches found: *.md(om[1]:r).docx
$ print *.md(om[1]:s/.md/.docx/) # Try another way -- also falls short
foo.docx.md
$ f=(*.md(om[1])); print ${f:r}.docx # Store it in a variable -- works but verbose
foo.md.docx
*.md(om[1]:r)
새 접미사를 추가하기 전에 어떻게든 zsh가 이를 완전한 스키마로 처리하도록 할 수 있다면 모든 것이 괜찮을 것 같습니다. 또는 :s///
수정자를 문자열 끝에 고정하는 방법이 있습니까 ?
이것을 달성할 수 있는 방법이 있나요?
답변1
$@
또 다른 방법은 인수 확산 연산자 (일명 )를 사용하여 $argv
추가 수정 과 함께 익명 함수를 사용하는 것입니다 .
(){print -r -- ${^@:r}.docx} *.md(om[1])
이렇게 하면 임시 배열 변수를 사용하는 수고를 덜 수 있습니다. 이는 여러 요소를 포함하는 경우에만 필요합니다 ^
. $@
이와 같은 요소의 경우 다음과 같이 단순화됩니다.
(){print -r -- $@:r.docx} *.md(om[1])
또는 @Gairfowl이 의견에서 제안한 대로:
(){print -r -- $1:r.docx} *.md(om)
잊지 마세요 --
( 에도 적용됨 -
). 그렇지 않으면 명령 주입 취약점이 발생할 수 있습니다! 이를 생략하는 것은 -r
의미가 없을 수도 있습니다 .
답변2
:s/l/r
해당 옵션을 활성화하면 수정자를 고정할 수 있는 것 같습니다 HIST_SUBST_PATTERN
.
~ % print -r -- *.md(om[1]:s/.md/.docx)
foo.docx.md
~ % print -r -- *.md(om[1]:s/%.md/.docx)
foo.md.md
~ % setopt histsubstpattern
~ % print -r -- *.md(om[1]:s/%.md/.docx)
foo.md.docx
잊지 마세요 --
( 에도 적용됨 -
). 그렇지 않으면 명령 주입 취약점이 발생할 수 있습니다! 이를 생략하는 것은 -r
의미가 없을 수도 있습니다 .
답변3
당신이 사용할 수있는e
끈 글로벌 예선REPLY
예를 들어 값을 변경하십시오.
print -r -- *.md(om[1]e_'REPLY=${REPLY:r}.docx'_)
잊지 마세요 --
( 에도 적용됨 -
). 그렇지 않으면 명령 주입 취약점이 발생할 수 있습니다! 이를 생략하는 것은 -r
의미가 없을 수도 있습니다 .