다음 bash 코드를 고려하십시오.
i=1
while [ $i -le 50 ]
do
echo $i
i=$(($i+1)) # <-------
done
날카로운 선에서 얼마나 많은 괄호를 사용하는 것이 왜 중요한가요? 이렇게 작성하면 코드가 작동하지 않습니다.
i=$($i+1)
왜 그럴까요?
답변1
물론 이것은 완전히 다릅니다. 우리는 집중한다세게 때리다내장된 기능만:
$((...))
산술 대체입니다. 산술 연산이 완료되면 전체 내용이 표현식의 값으로 대체됩니다. 바라보다http://mywiki.wooledge.org/ArithmeticExpression
((...))
표현식이 0이 아니면 종료 상태 0을 반환하거나 표현식이 0이면 1을 반환하는 산술 명령입니다. 부작용(할당)이 필요한 경우 "let"의 동의어로도 사용됩니다. 바라보다http://mywiki.wooledge.org/ArithmeticExpression
명령 대체: "$(cmd "foo bar")"
"cmd" 명령이 "foo bar" 인수와 함께 실행되고 "$(..)"
출력으로 대체됩니다. 바라보다http://mywiki.wooledge.org/BashFAQ/002그리고http://mywiki.wooledge.org/CommandSubstitution
마침내
다음보다 더 좋고/간단한 줄을 작성할 수 있습니다 i=$(($i+1))
.
((i++))
을 위한 loop
:
for i in {1..50}; do ...
또는
for ((i=1; i<50; i++)); do ...