primary cons → 모든 subcons의 초기화 → 모든 init → 모든 subcons block
Class
접근지정자
상속가능 여부 : Open, Final ( final이 기본 )
접근가능 여부 : public, protected, private, internal
protected는 open 추가로 붙여줘야 함 ( 당연히 public도 )
internal은 같은 모듈안에서 접근 가능 ( 한번에 컴파일되는 단위 기준? )
내부inner
클래스 내 클래스에만 접두 가능
자기 테두리클래스에도 접근가능
private 멤버에도 접근 가능
중첩nested ( 내부인데 inner로 지정하지 않을 경우 기본클래스 )
그냥 클래스안에 있는 클래스인듯
class Outer{ var a = 3 val innerObj = Inner() init { this.a = 4 } inner class Inner{ val c = a fun setA(a: Int){ this@Outer.a = a } } }var outer = Outer() var inner = outer.innerObj var inner2 = Outer().Inner() var inner3 = outer.Inner()println(inner.c) println(inner2.c) println(inner3.c) println(Outer().a) println("---------") println(outer.a) inner3.setA(10) println(outer.a)3 4 4 4 --------- 4 10Process finished with exit code 0
head / tail [-num] : 문서의 앞/뒤부터 num개만큼만 출력 ( 개행 기준 )
wc : 갯수 카운트
-l : 라인수
-w : 단어수
find : 대상의 하위디렉토리의 모든 파일/폴더 리스팅
-name "string" : 이름이 string인 문자 탐색 ( 부위일치는 와일드카드 사용 )
-iname "string" : 동일하되, 대소문자 구분 안함
-size +-[num][scale] : 1G 이상 이런식
-type f : 파일
-exce 이후의 기능 실행 ( 마지막에 세미콜론 )
grep : 파일 내 검색
-i : 대소문자 무시
-f : 파일타입
xargs : std out을 std in param으로 패키징?
주요 용법
shell script
for문 - txt파일 읽어서 출력하기
# cat은 파일 내용물을 \t와 \r \n 전부 구분자로 사용해서 읽어버림
fori in $(cat {filename})
do
echo $i
done
tr 문자열 수정
a ="my string"
# tr은 translate 명령어, -d 는 delete 플래그
# 아마 echo로 표준출력스트림에 올리고 tr에서 변환한 다음 다음스트림으로 넘기는 형태
echo $(echo $a | tr -d"str")
find 현재 디렉토리 하위 모든파일 접근
# -type f 파일타입
# cp -v는 복사이력을 출력하는 플래그
# {} 는 find에 의해 입력된 표준출력
# . 은 현재경로에 복사 ( 파일명 보존 )
# \ 는 종료구분자인듯..?
find -type f -exec cp -v {} . \;
while IFS 문으로 txt내용 세부 제어
# 타겟파일을 읽되, 각 줄을 루프하며, \t(탭)을 구분자로 사용하여0번 요소를 paramA에,1번요소를 paramB에 할당
whileIFS=$"\t"read -r paramA paramB
do
# paramA와 B에서 \r ( 개행문자. txt파일에서 엔터는 \n가 아닌 \r로 취급하는듯 )를 제거하고 출력
echo $(echo $paramA | tr -d'\r')
echo $(echo $paramB | tr -d'\r')
done < {파일이름}
파일명 변경
forfile in *;do
mv"$file""${file%2}.png"
done
소문자로 변경
find . -type f -exec bash -c'mv "$0" "${0,,}"'{} \;
Batch 파일 문법
공백문자도 구분자로 취급하니 조심..
@echo off : 에코 오프
setlocal (EnableDelayedExpansion) : 로컬변수명 개시. 이 이후에 호출/생성하는 모든 변수는 해당 스코프에 종속 ( ~ endlocal )
EnableDelayedExpansion이 포함되어있으면, !{변수명}! 형태의 확장변수 사용가능 ( not const, 동적으로 변경되는 변수 값을 읽기위해 써야하는 듯..? )
REM {내용} : 주석
set {변수명}={값} : 변수명에 값 할당
set /a {변수명} : number형으로 변수 선언 ( 사칙연산 가능 )
set /p {변수명} : input받아서 변수명에 데이터 입력
%{변수명}% : 변수명 접근
"%{변수명}%" : 변수 내 데이터 string으로 사용
for {옵션} {구분자} {값 넣을 변수} in (배열(입력값)) do ( 실행문 )
옵션
/f : 조건부 명령 처리 ( 입력값을 파일명이나 문자열을 받아서 파싱하는 등이 가능 )
구분자에 usebackq, tokens, delims등 사용 가능
값넣을 변수는 output이 여러개일 경우 자동으로 다음 알파벳자에 할당
ex. 값넣을변수가 %%a면, %%b, %%c 등에 알아서 부여 ( token에서 할당한 갯수에 따라 )
변수명 replace
set {변수명} = % {변수명} : {바꿀값}={바뀔값} %
문자열 파싱
% {변수명} : ~ (int 시작지점), (int 문자갯수) %
앞에서부터 시작지점부터 출력 ( 12345:~3 → 345 )
시작지점이 음수면 총문자열갯수+시작지점번째부터 출력 ( 12345:~-2 → 45 )
시작지점부터 문자갯수만큼 출력
조건문
if {조건문} {실행문}
if exist "{파일경로}" ( {실행문} )
추가 팁
mkdir : 최종 목적지만 입력하면 모든 중간경로 생성해줌
delayed expansion
사용 조건
setlocal enabledelayedexpansion을 선언해야 함
변수호출 시 %{변수명}% 이 아닌 !{변수명}!으로 호출해야 함 ( !!호출 시에 변수값을 갱신하는? )
개요
"Delayed Expansion"은 Windows 배치 스크립트에서 사용되는 개념입니다. 이는 변수가 실행 시간(runtime)이 아니라 파싱 시간(parse time)에 확장되도록 하는 기능입니다. 이를 통해 스크립트가 실행되는 동안 변수의 값이 동적으로 변경될 수 있습니다.