Unix / Linux - Shell Substitution

안녕하세요, 프로그래밍에 도전하는 여러분! 오늘 우리는 Unix와 Linux의 Shell Substitution에 대해 흥미로운 세상으로 뛰어들어 볼 거예요. 프로그래밍에 새로운 사람이라면 걱정하지 마세요 - 저는 이 주제를 단계별로 안내해 드릴 테니까요. 여러 해 동안 수많은 학생들을 가르친 경험을 바탕으로 말이죠. 그럼 이 흥미로운 여정을 함께 시작해 보겠습니다!

Unix / Linux - Shell Substitutions

Substitution이란 무엇인가요?

정밀한 내용으로 돌아가기 전에, 셸 프로그래밍에서 Substitution이 무엇을 의미하는지 이해해 보겠습니다.

Substitution은 셸에서 마법 같은 기술입니다. 셸이 명령어를 실행하기 전에 하나의 텍스트를 다른 텍스트로 바꾸는 것입니다. 케이크를 만들 때 레시피에 "1컵의 설탕"이 필요하다고 했지만, 설탕이 떨어졌다고 가정해 봅시다. 그래서 꿀을 대신 사용하기로 결정합니다. 이것이 바로 Substitution이 하는 일입니다 - 하나의 재료(또는 우리의 경우 텍스트)를 다른 것으로 바꾸는 것입니다.

셸 프로그래밍에서는 세 가지 주요 유형의 Substitution이 있습니다:

  1. 명령어 Substitution
  2. 변수 Substitution
  3. 산술 Substitution

이 가이드에서는最初的 두 가지에 집중할 것입니다. 그럼 명령어 Substitution부터 시작해 보겠습니다!

명령어 Substitution

명령어 Substitution이란?

명령어 Substitution은 명령어의 출력을 다른 명령어의 인수로 사용할 수 있게 해주는 기능입니다. 마치 도움을 주는 어시스턴트가 명령어를 실행하고 그 결과를 귓가에 속삭여주고, 그걸 주요 명령어에서 사용할 수 있는 것입니다.

명령어 Substitution을 어떻게 수행하나요?

명령어 Substitution은 두 가지 방법으로 수행할 수 있습니다:

  1. 백틱(`)을 사용하는 방법
  2. $() 문법을 사용하는 방법 (추천 방법)

이를 이해하기 위해 몇 가지 예제를 보겠습니다.

예제 1: 백틱을 사용하는 방법

current_date=`date`
echo "오늘 날짜는: $current_date"

이 스크립트를 실행하면 다음과 같은 출력이 나옵니다:

오늘 날짜는: Mon May 15 10:30:45 EDT 2023

여기서 무엇이 일어났나요? 셸은 date 명령어를 실행하고 그 출력을 캡처한 다음, current_date 변수의 값으로 사용합니다.

예제 2: $() 문법을 사용하는 방법

files_count=$(ls | wc -l)
echo "현재 디렉토리에 $files_count 개의 파일이 있습니다."

이 스크립트는 현재 디렉토리에 있는 파일의 수를 계산하고 다음과 같은 출력을 보여줍니다:

현재 디렉토리에 15 개의 파일이 있습니다.

이 예제에서는 셸이 먼저 ls 명령어를 실행하여 모든 파일을 목록에 보이고, 그 출력을 wc -l에 파이프(|)를 통해 전달하여 줄 수를 계산하고, 그 결과를 files_count 변수에 할당합니다.

명령어 Substitution을 왜 사용하나요?

명령어 Substitution은 다른 명령어의 일부로 명령어의 결과를 사용하거나 변수로 할당할 때 매우 유용합니다. 마치 프로그래밍 도구셋에서瑞士军刀 같은 것입니다!

변수 Substitution

이제 변수 Substitution으로 넘어가겠습니다. 이는 스크립트에서 변수의 값을 사용할 수 있게 해주는 강력한 기능입니다.

변수 Substitution이란?

변수 Substitution은 셸이 변수 이름을 그 값으로 치환하는 것입니다. 마치 누군가의 별명을 사용할 때처럼 - 별명을 사용하면 모두가 그 사람을 가리키는 것을 알 수 있습니다.

변수 Substitution을 어떻게 수행하나요?

변수 Substitution을 수행하려면 변수 이름 앞에 dollor 기호($)를 사용합니다.

예제 1: 기본 변수 Substitution

name="Alice"
echo "안녕하세요, $name!"

출력:

안녕하세요, Alice!

여기서 셸은 $name을 "Alice"으로 치환합니다.

예제 2: 중괄호를 사용하는 방법

occasionally, you need to use curly braces {} to clearly define where the variable name ends.

fruit="apple"
echo "我喜欢 ${fruit}s"

출력:

我喜欢 apples

중괄호를 사용하지 않으면 셸은 fruits 변수를 찾으려고 할 것입니다.

고급 변수 Substitution 기술

고급 기술을 몇 가지 더 살펴보겠습니다:

1. 기본 값 제공

변수가 설정되지 않았다면 기본 값을 제공할 수 있습니다:

echo "안녕하세요, ${name:-World}!"

name이 설정되지 않았다면 다음과 같이 출력됩니다:

안녕하세요, World!

2. 기본 값 할당

변수가 설정되지 않았다면 기본 값을 할당할 수 있습니다:

echo "안녕하세요, ${name:=World}!"
echo $name

출력:

안녕하세요, World!
World

3. 설정되지 않았을 때 오류 메시지 표시

변수가 설정되지 않았다면 오류 메시지를 표시할 수 있습니다:

echo "안녕하세요, ${name:?'Name is not set'}"

name이 설정되지 않았다면 다음과 같은 오류 메시지가 표시됩니다:

bash: name: Name is not set

다음 표는 이러한 고급 기술을 요약합니다:

문법 설명 예제
${var:-word} var이 null이나 설정되지 않았다면 word를 치환합니다. ${name:-World}
${var:=word} var이 null이나 설정되지 않았다면 var을 word로 설정합니다. ${name:=World}
${var:?message} var이 null이나 설정되지 않았다면 메시지를 표시합니다. ${name:?'Name is not set'}
${var:+word} var이 설정되었다면 word를 치환합니다. 그렇지 않으면 아무것도 치환하지 않습니다. ${name:+Hello}

기억하세요, 연습이 완벽을 이루는 열쇠입니다! 이러한 Substitution을 자신의 스크립트에서 실험해 보지 마세요. 자전거 타기처럼처럼처럼,처음에는 어려울 수 있지만, 한 번 익숙해지면 쉽게 다니게 될 것입니다!

결론적으로, 셸 Substitution은 스크립트를 더욱 동적으로 만들 수 있는 강력한 도구입니다. 명령어와 변수의 출력을 창의적으로 사용할 수 있게 해줍니다. 셸 프로그래밍의 여정을 계속하면서, 이러한 기술들을 점점 더 많이 사용하게 될 것입니다.

기쁜 코딩을 하세요, 그리고 프로그래밍의 세계에서 호기심은 최고의 친구입니다!

Credits: Image by storyset