유닉스 범위설정
글쓴이: eu / 작성시간: 월, 2022/03/28 - 2:00오전
디렉토리 안의 파일 전체:
code-09_00
code-09_20
code-09_40
code-10_00
code-10_20
code-10_40
code-11_00
code-11_20
code-11_40
code-12_00
code-12_20
code-12_40
code-13_00
code-13_20
code-13_40
code-14_00
code-14_20
code-14_40
code-15_00
code-15_20
code-15_40
code-16_00
code-16_20
code-16_40
문제 : 파일 이름 끝 부분이 11_00 에서 14_40 까지인 파일을 나열해라.
-> ls code-[!09-10]* ; ls code-[!15-16]*
이렇게 범위설정을 해서 필요없는 부분을 삭제해주었는데
결과값이 원하는대로 나오지 않습니다.
10이 넘어가면 인식을 못하는건가요 ?
도움 주시면 감사하겠습니다.
Forums:
음 ..
ls code-[!09-10]* 에서 [] 는 문자 하나와 매치됩니다 (bash pathname expansion).
이걸 풀어보면 맨 앞에 ! 이 있으므로 모두 !0, !9-1, !0 이 되는거죠.
!0 은 0 을 제외한 문자, 9-1 은 range 인데 순서가 잘못되었으므로 매치되는 문자가 없습니다.
0 은 맨 앞에 ! 이 있으므로, 맨 앞의 !0 과 중복이 됩니다.
[] 에서 range 는 대/소의 개념보다는 012345..ABCDEF..abcde.. 와 같은 순서(ascii 문자열)에서 특정 범위에 해당한다고 생각하시면 좀 더 이해하시기 편할겁니다.
우리는 숫자로 이해하고 썼지만, 실제로는 숫자가 아니라 모두 문자로 취급되어 매치되는거죠.
그래서 code 다음의 두 문자가 숫자 11~14 인 경우라면 다음과 같이 쓰면 됩니다.
이런 경우에는 {} 를 쓰면 좀 더 직관적일 수도 있습니다. (숫자 range, array 표현 가능)
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
정말 감사합니다.
궁금했던 점이 시원하게 해결되었습니다. 정말 감사합니다 선생님 ㅜㅜ!
댓글 달기