문제

zsh에서 zsh가있는 파일의 무리를 만들어야 할 때 일반적으로 다음과 같습니다.

for x in $(seq 1 1000); do .....; done
.

이것은 잘 작동하며, 이름이있는 파일을 foo-1.txt .. foo-1000.txt.
그러나 이러한 파일은 멋지게 정렬되지 않으므로 $x 변수를 0으로 패드하여 foo-0001.txt의 이름을 생성하고 싶습니다.

zsh에서 그것을하는 방법은 무엇입니까?(및 보너스 질문, 배쉬에서 어떻게해야합니까?)

도움이 되었습니까?

해결책

-w 플래그를 사용하여 seq (모든 쉘에서) :

$ seq -w 1 10
01
02
03
04
05
06
07
08
09
10
.

다른 팁

참조를 위해 숫자 값 생성을 제어 할 수없는 경우 다음과 같이 패딩 할 수 있습니다.

% value=314
% echo ${(l:10::0:)value}
0000000314
% echo $value
314
.

bash의 중괄호 확장 :

$ for n in file-{0001..1000}.txt; do echo $n; done
file-0001.txt
file-0002.txt
file-0003.txt
file-0004.txt
file-0005.txt
file-0006.txt
file-0007.txt
file-0008.txt
file-0009.txt
file-0010.txt
...
file-0998.txt
file-0999.txt
file-1000.txt
.

zsh도 작동합니다.

bash에서 작동합니다 (ZSH를 모르지만) :

echo foo{0000-1000}.txt 
.

  1. printf
    모든 쉘에서 제로가 작동하는 PROD를 사용하여 PRINTF 사용 :

    $ printf 'foo%03d.txt\n' $(seq 4)
    foo001.txt
    foo002.txt
    foo003.txt
    foo004.txt
    
    $           printf  'foo%03d.txt\n' {1..4}       # works in bash, ksh, zsh.
    $ n=4;      printf  'foo%03d.txt\n' {1..$n}      # only ksh, zsh
    $ n=4; eval printf '"foo%03d.txt\n" {1..'"$n"'}' # workaround needed for bash
    
  2. Brace 확장을 사용하십시오 (Bash와 ZSH만이 선도적 인 0을 유지하지 않음).

    $ printf '%s\n' foo{1..004}.txt
    foo001.txt
    foo002.txt
    foo003.txt
    foo004.txt
    
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top