
처음 shell programming 관련 글에서 if 를 만났을 때, 당황스러웠습니다. if 가 사용되는 기본형을 봅시다. if [ expression ] then ... fi 그 글에서 if 와 [ 사이에 공백이 필요하고 [ 와 expression 사이에도 공백이 필요하다고 강조를 하더군요. 공백이 왜 필요하지? if 다음에 ( 가 따라와야 하는 C/C++ 혹은 Java 등과 비교해보면 이상합니다. 그 언어들에서 if 와 ( 사이, ( 와 expression 사이에 공백을 요구하지 않았거든요. 그래서 이유를 알아 보았습니다. 다른 프로그래밍 언어에서는 if 는 뒤에 논리식(logical expression)이 따라 옵니다. 하지만 bash 는 사정이 다릅니다. if command #command 위치..

기본값을 사용하거나 치환하는 것들을 정리해 봅니다. 위의 스크립트를 'first.sh' 로 저장하고 실행시킨 결과를 보겠습니다. 3 행은 bash version 확인을 한 것인데, mac에서는 기본적으로 제공하는 /bin/bash가 낡아서... version 에 따라 다른 결과를 주는 경우는 따로 표시할 것이고 여기서는 중요하지 않습니다. 5 행을 보면 정의한 적이 없는 변수 'num'이 등장했습니다. ${name-value} name 변수가 정의되지 않은 경우 value(기본적으로 문자열)을 사용합니다. 7 행에서는 위와 같은 방식으로 기본값을 사용한 경우 name 값이 정의되는 것이 아님을 확인할 수 있습니다. 이번에는 변수 num 의 값을 null 로 두었습니다. 실행 결과는 ? 기본값이 적용되지 ..

name=-9021 what=${name%${name#?}} 변수확장이란 변수명 앞에 $를 붙이는 것이었습니다. 덧붙여서 { } 를 이용하여 변수를 다른 문자열과 구분지을 수도 있고 다양한 조작도 가능합니다. ${ something } 일단 세 가지를 다루었습니다. echo ${#name} # 변수 길이 출력 echo ${name:index:length} # 부분 문자열 추출 echo ${name#pattern} # name 의 앞부분에서 globbing pattern 에 해당되는 문자열 제거 # 이 들어간 것을 하나 더 공부합니다. ${name##pattern} 앞서 # 이 하나 들어간 것과의 차이는? greedy match 여부입니다. # 가 하나일 때는 짧게 ## 는 최대한 길에 match 되는 것..

변수 할당에 있어서 = 좌우에 공백을 허용하지 않는다! '아니! 왜?' 다른 언어로 programming 하는 것에 비교했을 때 납득하기 힘든 제약입니다. 처음에는 당황스러웠지만 몇 분 후에 이유를 깨닫게 되죠. 변수 x 에 trauma 를 할당하기 위해 터미널에서 x = trauma 를 입력해 봅니다. ( = 주변에 공백을 줍니다.) 흠! 공백으로 인해 shell 이 x 라는 command 를 찾는군요. 자, 이번에는 공백없이 grep 이라는 변수를 만들어 보겠습니다. 잘 되는군요. 그런데, 만약 = 주변에 공백을 준다면? 하하! grep 명령으로 aaa 파일에서 = 가 있는 행을 찾아주네요. 터미널 입력에서 공백이 허용되면 = 는 command 의 인자인지 할당기호인지 구별할 수가 없겠죠. 한편, p..

지난 글의 출발은 짧은 script #!/bin/bash if python3 then echo "hahaha" else echo "..." fi 이었습니다. 이제 if 다음의 python3 가 이상하지 않습니다. 왜냐하면 if 일반적으로 다음에 command 가 따라온다. 을 알기 때문이지요. python3 는 command 이니 문제가 없습니다. ( ls, echo 등등을 python3 위치에 넣고 실행해 보세요!) 그럼 이제 python3 는 참이냐? 거짓이냐? 는 의문을 가질 수 있습니다. But 다른 언어들과는 다르게 shell 에서 if 는 참, 거짓이 아니라 뒤따르는 command 의 exit code 를 바탕으로 분기 합니다. 그리고 command 가 정상 종료했을 때, 즉 exit code..
- Total
- Today
- Yesterday
- nearest common ancestor
- 세그먼트 트리
- map
- lazy propagation
- bash
- C++ big number
- script
- number theory
- python3
- persistent segment tree
- stack
- JavaScript
- Reference
- BOJ
- RUBY
- math font
- dynamic programming
- Vim
- fenwick tree
- max flow
- segment tree
- Shell Programming
- Aho-Corasick
- 정수론
- shell
- javascript array
- Dijkstra
- 백준
- bash script
- 다익스트라
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |