안녕히 가세요! 저는 단지 초보자이고 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
유틸리티 사이에 파이프를 설정하는 것 외에는 많은 작업을 수행하지 않습니다.seq
xargs
이 작업을 순수하게 에서 수행하려면 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
다음 사항을 기억하시면 괜찮을 것 같습니다.
이전 버전의
bash
셸(예: macOS에서 사용되는 기본 버전)은 숫자 제로 패드를 지원하지 않습니다.znum
이전에 사용한 방식과 비슷한 작업을 수행해야 합니다 .첫 번째 반복을 시작하기 전에 쉘은 중괄호 확장을 확장하고 확장된 목록을 메모리에 유지합니다. 이 예에는 999개의 숫자가 있으며 대략 4Kb의 메모리를 소비합니다. 더 큰 목록의 경우 이는 실행 불가능하고 느릴 수 있습니다. 예를 들어 참조하십시오.Bash 루프는 정확히 어떻게 작동합니까?
쉘은
bash
중괄호 확장 내에서 변수를 허용하지 않습니다.