
문자열을 다루는 방법을 간략히 기록해 둔다. String in Ruby shell 문법에 영향을 많이 받은 ruby 는 작은 따옴표로 둘러 싼 문자열(single quote string ) 은 어떤 경우에도 문자열 자체를 출력한다. #ruby1.rb puts 'single quote test' num1 = 5 num2 = 10 puts '#{num1} is less than #{num2}!' 이 스크립트의 결과는 이다. 반면 큰 따옴표로 둘러싼 문자열은 치환(혹은 확장)이 가능하다. #ruby2.rb puts 'single quote test' num1 = 5 num2 = 10 puts "#{num1} is less than #{num2}!" 이번의 실행 결과는 다음과 같다. 물론 format strin..

두 언어 모두 간혹 쓰니까 헷갈려서 아예 더 헷갈리게 나란히 기록해 둔다. 1. 우선 둘 모두 한줄 주석(comment)는 #를 이용한다. 2. C/C++ 은 문자열과 매크로 내부를 제외하면 개행문자를 parsing 과정에서 다른 공백 문자와 동등하게 취급한다. 반면 python, ruby 에서 개행문자는 문법적 요소이다. C/C++ 에서는 변수 선언에서 type 지정자를 선두에 둠으로 인해 발생하는 문법적 모호성을 제거하기 위해 statement 는 ;(세미콜론)로 끝내야 했다. 예를 들어 int abc 을 보았을 때, 현재까지 abc 가 정수형 변수인지 아니면 returning int 인 함수의 이름인지를 알 수가 없다. 즉, int abc (); 의 일부일 수 있는 상황이다. 이렇게 코드를 작성할 ..

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

bash 에서 모든 변수는 '문자열' 입니다. 따라서 변수의 확장, 명령어 대치 등이 일어나지 않는다면 다음은 모두 같습니다. name=mathtrauma name='mathtrauma' name="mathtrauma" 일단 누구나 짐작할 수 있는 '공백을 포함하는 문자열'을 한 묶음으로 만드는 기능 외에 따옴표는 왜 필요할까요? 1. Single Quotes 작은 따옴표로 묶인 문자열은 어떤 경우에도 확장이나 치환이 일어나지 않습니다.(No interpolation) $(command ~) 형태를 사용하여 command 가 shell 에서 수행한 결과를 문자열로 확보할 수 있습니다. 이를 명령어 치환(command substitution) 이라고 부르나 봅니다. 위의 예에서 보듯이 $(echo ~) 는..

기본값을 사용하거나 치환하는 것들을 정리해 봅니다. 위의 스크립트를 '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 되는 것..

Shell 이 수행하는 filename expansion 을 globbing 이라고 한다네요. 파일이나 디렉토리 이름을 매치시키키 위해 사용됩니다. 테스트를 위해 몇 개의 파일을 만듭니다. globbing pattern으로 간주되지는 않지만 curly brace { } 를 이용해서 한꺼번에 여러 개의 파일을 만들 수 있습니다. 이를 중괄호 확장이라고 한답니다. {a,b,c} 어느 부분에도 공백을 집어넣어 띄어쓰기하면 안되는 이유는 첫 글에서 다루었습니다. 이왕 중괄호 확장이 나왔으니 하나만 더! {1,2,3,4,5,6,7} 대신 {1..7} 을 사용할 수 있네요. globbing 패턴은 와일드 카드 문자 * , ? 와 대괄호 [ ] 를 사용합니다. ? 는 아무거나 한 문자, * 는 아무 문자열을 뜻합니다..

잠시 용어 정리! 변수(variable) 와 매개변수(parameter) 라는 용어들은 사용되는 분야에 따라 다르게 사용되나 봅니다. (수학, 프로그래밍 언어, shell 모두 조금씩 달라요!) bash reference manual 에서는 다음과 같이 기술합니다. A parameter is an entity that stores values. It can be a name, a number, or one of the special characters listed below. A variable is a parameter denoted by a name. 이름 붙은 매개변수를 변수라고 부르네요. (변수가 매개변수의 하위개념이라니! 다른 언어들과는 반대네요.) 흠! 약간 이상하긴 하지만... 나중에 고찰하..
- Total
- Today
- Yesterday
- javascript array
- 백준
- max flow
- Dijkstra
- Shell Programming
- JavaScript
- fenwick tree
- bash
- persistent segment tree
- map
- dynamic programming
- python3
- bash script
- script
- stack
- shell
- RUBY
- nearest common ancestor
- segment tree
- number theory
- BOJ
- Aho-Corasick
- lazy propagation
- Vim
- C++ big number
- math font
- 세그먼트 트리
- Reference
- 정수론
- 다익스트라
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |