숫자가 포함된 Bash 인쇄 명령

숫자가 포함된 Bash 인쇄 명령

안녕히 가세요! 저는 단지 초보자이고 bash 스크립팅에 대해 더 깊이 탐구하고 싶습니다. 여러 숫자를 시도하려는 명령을 실행하는 스크립트를 만들고 싶습니다.매번 001-999|예제 python3 tool.py -n 12345 -e <numbers from 001-999 in each time> 감사합니다

답변1

일방 통행:

seq -w 1 999 | xargs -I {} python3 tool.py -n 12345 -e {}

그러면 각 숫자 출력에 대해 Python 스크립트가 한 번씩 실행됩니다 seq. 여기에 사용된 이 seq유틸리티(GNU coreutils의 일부)는 1부터 999까지의 숫자를 출력하며, 각 숫자는 동일한 너비로 0으로 채워집니다.

셸 자체 는 bash유틸리티 사이에 파이프를 설정하는 것 외에는 많은 작업을 수행하지 않습니다.seqxargs

이 작업을 순수하게 에서 수행하려면 bash산술 for루프를 사용하여 printf숫자 형식을 지정할 수 있습니다.

for (( num = 1; num <= 999; ++num )); do
    printf -v znum '%.3d' "$num"
    python3 tool.py -n 12345 -e "$znum"
done

이 변수는 위의 루프가 반복될 때 znum마다 0으로 채워진 세 자리 변형을 보유합니다 .$num

더 짧은 루프를 만드는 일반적인 방법 은 다음과 같이 중괄호 확장을 bash사용하는 것입니다 .for

for num in {001..999}; do
    python3 tool.py -n 12345 -e "$num"
done

다음 사항을 기억하시면 괜찮을 것 같습니다.

  1. 이전 버전의 bash셸(예: macOS에서 사용되는 기본 버전)은 숫자 제로 패드를 지원하지 않습니다. znum이전에 사용한 방식과 비슷한 작업을 수행해야 합니다 .

  2. 첫 번째 반복을 시작하기 전에 쉘은 중괄호 확장을 확장하고 확장된 목록을 메모리에 유지합니다. 이 예에는 999개의 숫자가 있으며 대략 4Kb의 메모리를 소비합니다. 더 큰 목록의 경우 이는 실행 불가능하고 느릴 수 있습니다. 예를 들어 참조하십시오.Bash 루프는 정확히 어떻게 작동합니까?

  3. 쉘은 bash중괄호 확장 내에서 변수를 허용하지 않습니다.

관련 정보