먼저 파이썬에서는 for문을 통한 반복문의 범위는
들여쓰기로 결정한다.(는 점은 다들 알고 계실 것)
#python3
for i in range(5):
print(i)
print("Keep going!") # 한 번만 출력됨
sh에서는 do와 done 사이에 반복 스코프를 넣으면 된다.
#!/bin/bash
for i in $*
do # 들여쓰기 컨벤션이 궁금하다.
echo $i
done
echo "Keep going!"
갑자기 궁금한 게 생겼다.
파이썬의 range 배열은 sh에서는 어떤 방식으로 만들 수 있을까?
ChatGPT에게 물어보자.
이건 뭐, 다른 언어랑 비슷해 보이는 문법이라서 생소하지는 않은데,
...괄호가 두 겹이네.
신기한 건 , `for i in $*` 처럼 사용할 수도 있고,
`for ((i=0; i<5; i++)); do` 처럼 사용할 수도 있다는 점?
전자는 파이썬 스타일, 후자는 자바 스타일 같은 느낌이다.
for문을 좀 더 파이썬스럽게 만들 수도 있는 것 같은데?
(ChatGPT가 seq에 대해 알려주었다.)
for i in $(seq 0 5); do
echo $i
done
파이썬처럼 시작인덱스 생략도 가능할까?
#!/bin/bash
for i in $(seq 5); do
echo $i
done
파이썬처럼 step도 있는 건 아니겠지? (어? 있다!ㅎ)
근데 $(seq start step end) 순서로 써야 한다.
#!/bin/bash
for i in $(seq 0 2 10); do
echo $i
done
슬슬 sh의 for문이 친근해지는 느낌이다.
파이썬 이전에 perl이 있었다고들 하지만,
sh랑 이렇게 비슷한 문법을 갖고 있는 게
신기하기도 하다. 특히
파이썬의 `for i in range(0, 10, 2):` 랑
sh의 `for i in $(seq 0 2 10); do`랑 비슷하다는 거.
마지막으로
이게 좋은 컨벤션인지 모르겠지만,
for문 안에 시퀀스(seq)를 사용할 때는 (어차피 스코프가 필요없으니)
do와 done을 쓰지 않아도 문제없이 잘 실행되는 것 같다.
#!/bin/bash
for i in $(seq 0 2 10)
echo $i
echo "Finished"
하나 더
seq 대신 중괄호로도 배열을 생성할 수 있다.
#$!/bin/bash
for i in {1..5}
echo $i
물론 중괄호 안에서도 스텝을 지정할 수 있다.
#!/bin/bash
for i in {1..10..2} # 파이썬 range랑 비슷(start, end, step), seq와는 다르다는 점도 재미있다.
echo $i
To be continued..
'기타 > 셸스크립트' 카테고리의 다른 글
[리눅스] sh파일을 리포매팅해주는 shfmt (0) | 2024.02.10 |
---|---|
[리눅스] 셸스크립트기초 - 지역변수와 전역변수 (0) | 2024.02.10 |
[리눅스] print 함수를 재정의해봤더니 화면이 와장창 깨진다ㅜ (0) | 2024.02.10 |
댓글