본문 바로가기
  • 오늘도 한걸음. 수고많았어요.^^
  • 조금씩 꾸준히 오래 가자.ㅎ
IT기술/리눅스

[shell] 헷갈리는 arguments, ${}, $(), pipeline(|), quotations 정리

by 미노드 2023. 4. 4.

echo와 printf 비교

echo는 인자 사용 안됨, 자동 줄바꿈 O
printf는 인자를 사용해서 출력 가능, 자동 줄바꿈 X

스크립트 전달 인자 arguments

  • $# : 스크립트에 전달되는 인자들의 수(C언어에서 args)
  • $0 : 실행하는 스크립트의 파일명으로 실행했을 때 경로를 포함한다면 경로를 포함해서 나옵니다.
  • $1, $2 … : 스크립트로 전달된 인자들(C언어에서 argv[0], argv[1]…)
1
2
3
4
5
6
#!/bin/bash
 
echo "Echo Test"
printf "printf Test\n"
printf "Name of script : %s\n" $0
printf "%d arguments %s %s\n" $# $1 $2
cs

${}와 $()의 차이

  • $(command) is “command substitution”
  • ${parameter} is “parameter substitution”

즉 $()는 안에 명령어를 사용할 때 쓰고(ex: find)
${}는 파라미터를 이용할 때 쓴다.

1
2
3
4
5
6
#!/bin/bash
 
test="abc"
num=100
 
echo "$(find . -name grory.txt)"
cs
$() 의 사용 예시
1
2
3
4
5
6
7
#!/bin/bash
 
test="abc"
num=100
 
echo "${test}"
echo "${num}"
cs
${} 의 사용 예시

리다이렉션(redirection)

리다이렉션을 이용하면 각 스트림의 방향을 지정할 수 있습니다.

표준 출력(덮어쓰기) > 명령어 > 파일 명령어의 표준 출력 스트림의 도착 지점을 파일로 설정(덮어쓰기)
표준 출력(추가) >> 명령어 » 파일 명령어의 표준 출력 스트림의 도착지점 파일에 내용 추가
표준 입력 < 명령어 < 파일 파일로부터 입력 받음

파이프라인( | )

리눅스에서 파이프는 연결을 제공합니다.
파이프라인을 통해 명령어와 명령어를 연결시킬 수 있습니다.

한번의 트랜젝션에 두개 또는 두개이상의 명령어를 사용할 때 하나의 결과를 가지고 다음 명령어에 사용하기 위한 작업이 필요한 경우가 있습니다.
그럴 때 주로 파이프라인을 사용 합니다.

예시로 ps 명령어와 grep 명령어를 조합할 수 있습니다.

3가지 quotation 차이

"ㅇㅇ" (double quotation)

더블쿼테이션 안에서는 일반적으로 문자열을 출력할 수 있습니다.
내부에 변수($변수명)도 포함해서 출력할 수 있습니다.

'ㅇㅇ' (single quotation)

싱글쿼테이션 안에서는 일반적으로 문자열을 출력할 수 있습니다.
더블쿼테이션보다 더 문자열을 확실하게 표현하기 위해, 변수, 명령어 사용이 안됩니다.

`ㅇㅇ` (backtick)

억음부호는 앞의 두 인용 기호와는 다른 쓰임새를 보이지만 전혀 다른 기능을 수행.
백틱 안에서 명령어를 입력하면 동작합니다.
문자열과 같이쓰려면 조합해서 써야합니다.