아래 설명된 대로 bash 루프 내에서 산술 연산을 수행해야 합니다.
CYCLE?=3
COUNT=1
download_when_ready: ## Will try the download operations many times till it succeeds or it reaches 10 tries
while ! composer update $(bundle) 2> /dev/null && [[ $(COUNT) -lt 10 ]]; \
do \
COUNT=$$(( $(COUNT)+1 )); \
SLEEP=$$(( ($(COUNT) / $(CYCLE)) + ($(COUNT) % $(CYCLE)) )); \
echo "count $(COUNT)"; \
echo "cycle $(CYCLE)"; \
echo "sleep $(SLEEP)"; \
sleep $(SLEEP); \
done
이것은 결코 멈추지 않으며 다음을 제공합니다.
count 0
cycle 4
sleep 0
count 0
cycle 4
sleep 0
....
count 0
cycle 4
sleep 0
보시다시피 변수에는 초기 값이 있으며 절대 변경되지 않습니다!
고쳐 쓰다
PRETTY_NAME="SUSE Linux 엔터프라이즈 서버 11 SP4"
$$c
그러나 다음 코드에서는 while 루프 앞과 내부에 값을 비워 둡니다.
CYCLE?=3
COUNT=1
download_when_ready: ## Will try the download operations many times till it succeeds or it reaches 10 tries
@c=$(COUNT);
@echo $$c;
while ! composer update $(bundle) 2> /dev/null && [[ $(COUNT) -lt 10 ]]; \
do \
echo "$$c"; \
done
답변1
고쳐 쓰다
감사해요@Kusalananda 댓글, 나는 생각했다.
CYCLE?=3
COUNT=1
download_when_ready: ## Will try the download operations many times till it succeeds or it reaches 10 tries
while ! composer update $(bundle) 2> /dev/null && [ "$$c" -lt 10 ]; \
do \
c=$$(( $${c:-$(COUNT)}+1 )); \
s=$$(( ($$c / $(CYCLE)) + ($$c % $(CYCLE)) )); \
echo "count $$c"; \
echo "cycle $(CYCLE)"; \
echo "sleep $$s"; \
sleep $$s; \
done
이것은 실제로 작동합니다!
count 1
cycle 4
sleep 1
count 2
cycle 4
sleep 2
count 3
cycle 4
sleep 3
count 4