셸 스크립트 실행 시에는 절차를 따지지 않나요?

조회수 368회

"이것이 리눅스이다"(우재남 저)라는 책 속 7장 셸 스크립트 프로그래밍 단원을 학습 중

의구심이 들었습니다.

*set.sh*

 1. #!/bin/sh
 2. echo "today's date is $(date)."
 3. set $(date)
 4. echo "today's day is $4day."
 5. exit 0


*결과값*
today's date is 2021. 05. 11. (화) 20:35:04 KST.
today's day is (화)day.

책의 셸 스크립트단원 도입부분을 보면 이와 같은 내용이 있습니다.

리눅스의 대부분이 C로 작성되었기에 셸 스크립트는 C와 유사한 방법으로 프로그래밍 할 수 있다

그렇다면 셸 스크립트 프로그래밍은 절차지향인가요?

위 예제에서 2행에서의 $(date)는 3행에서 그 값이 결정이 납니다.

그래서 C에서라면 오류가 나야하는 문장인데 셸 스크립트에서는 정상작동을 하네요

어떻게 실행이 되는지 설명부탁드립니다!!

1 답변

  • 좋아요

    2

    싫어요
    채택 취소하기

    질문의 위 예제에서 2행에서의 $(date)는 3행에서 그 값이 결정이 납니다.라는 해석이 잘못 되었습니다.

    올려주신 코드는 위에서부터 한줄씩 실행된 것입니다.

    $(a)는 a라는 명령어를 실행하고 그 결과를 그 자리로 가져오라는 겁니다.

    echo "today's date is $(date)."에서 date는 리눅스 명령어 이고, 그 결과가 $(date)자리에 반환되어, today's date is 2021. 05. 11. (화) 20:35:04 KST.이 출력된 겁니다.

    즉, date의 결과가 2021. 05. 11. (화) 20:35:04 KST입니다.

    set은 뒤에 있는 실행결과를 명령줄 인수 처럼 쓰겠다는 겁니다.

    set $(date)하게 되면 date의 결과인 2021. 05. 11. (화) 20:35:04 KST이 얻어지는데 이 문자열을 명령줄 인수처럼 쓰겠다는 것입니다.

    따라서 set $(date)이 실행된 후에, 2021.이 $1이고, 05.이 $2가 되고, 11.이 $3이고, (화)이 $4이고, 20:35:04이 $5이고, KST이 $6입니다.

    그래서 그 다음줄에 $4day(화)day라고 출력된 것입니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 정말 깔끔하게 설명을 해주셨네요.ㅎㅎ 제가 $(A)을 잘못 이해하고 있었군요! 항상 감사합니다!! :) 임지훈 2021.5.12 19:19

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)