쉘에서 역 슬래시의 용도를 설명한다.  역 슬래시는 특별한 용도로 쓰인다. 원래의 문자가 가진 의미를 문자로 표현하기 위해 사용된다.


대표적인 예시가 다음과 같다. > 이라는 입력 리디렉션을 다른 문자 >로 바꾸었다. 


$ echo >

-bash: syntax error near unexpected token `newline'

$ echo \>

>




특수 문자를 보여주기 위해 사용된다. 


$ echo "\\"

\



그러나 공백 앞에 쓰일 때는 그냥 문자로 쓰인다. 


$ echo "\ is"

\ is




변수 대체를 막을 수 있다. 

$ echo \$greeting

$greeting




"를 표현하기 위해 \"를 사용한다.

$ greeting=one'

>

> 'two

$ echo "\"$greeting\""

"one


two"





참고로 변수가 멀티 라인 값을 가지면, 따옴표가 없으면 개행 문자를 보여주지 않는다. 큰 따옴표를 사용하면 멀티 라인을 출력한다.


$ greeting=one'

>

> 'two

$ echo $greeting

one two

$ echo "$greeting"

one


two





개행문자 앞에 \을 사용하면 개행문자가 없었던 것처럼 변수에 저장한다. 


$ l=hello\

> world\

> OK


$ echo $l

helloworldOK


$ echo "$l"

helloworldOK

Posted by '김용환'
,


쉘에서 따옴표가 없는 것, 작은 따옴표, 큰 따옴표 사이의 주요 차이점을 확인한다.


작은 따옴표는 쉘에 모든 문자를 무시하도록 알리지만, 

큰 따옴표는 대부분의 문자를 무시하도록 알린다. 


쉘에서 큰 따옴표 안에서 사용되는 다음 세 문자는 무시하지 않는다.

- 달러 기호($)

- 역 따옴표(`)

- 백 슬래시(\)



예시 1)


쉘은 별표를 보고 현재 디렉토리의 모든 파일 이름을 대체한다.


$ files=*

$ echo $files

a aa.txt b bb.txt foo server1.rb webserver1 webserver2



쉘은 작은 따옴표로 묶인 문자를 완전히 홀로 남겨두고 결과적으로 $files를 출력한다. 


$ echo '$files'

$files



쉘은 변수 이름 대체를 큰 따옴표 안에서 수행한다.


$ echo "$files"

*





예시 2)



쉘에서 따옴표를 사용하지 않으면 변수의 개행 문자를 제거할 뿐 아니라 공백이나 탭과 같은 매개변수 구분자도 처리한다


a="Hello

> World"

$ echo $a

Hello World


쉘은 큰 따옴표가 포함된 공백 문자를 남긴다. 


a="Hello

> World"

$ echo "$a"

Hello

World




쉘에서 작은 따옴표를 감추기 위해 큰 따옴표를 사용할 수 있고 그 반대도 사용할 수 있다.


$ a='"Hello" Shell'

$ echo $a

"Hello" Shell

$ b="Hello 'Shell'"

$ echo $b

Hello 'Shell'






Posted by '김용환'
,





$((expression))은 산술 확장(arithmetic expansion)이라 해서 수식을 사용할 수 있다. 


그룹핑을 강제하기 위해 표현식 안에서 괄호를 자유롭게 사용할 수 있다.


$((expression))에서 사용할 수 있는 연산자는  +, -, *, /, %, **와 같은 기본 문법에 +=, -=, *=, /=, 변수++, 변수--  등 많은 연산자와 숫자, 변수를 사용할 수 있다. 




예시 1) x진수를 10 진수로 


$ echo $((16#100))

256



예시 2) 간단한 산술 확장


$ i=2

$ echo $((i+1))

3



예시 3) 특정 변수에 산술 계산한 다음 다시 해당 변수에 저장


$ i=$(( i * 5 ))

$ echo $i

10



예시 4) 고급 산술 확장


$ i=3

$ j=2

$ echo $((i = i * (j + 1)))

9




예시 5) ++


$ i=10

$ i=$(( ++i ))

$ echo $i

11



예시 6) *=


$ i=5

$ i=$((i*=5))

$ echo $i

25




예시 7) true(1)/false(0) 


$ i=5

$ j=$(( i < 10 ))

$ echo $j

0






유의할 점은 다음과 같다. 


1. (( 다음에 공백이, )) 전에 공백이 있어도 동작한다. 


$ i=$(( i * 5 ))

$ echo $i

50



2. (( 사이에 공백이 있으면 동작하지 않는다. 


$ i=$( (i * 5) )

-bash: i: command not found






Posted by '김용환'
,