테스트 코드를 작성합니다.

테스트 코드를 작성합니다.

저는 여러 문자열을 사용하는 bash 함수를 작성 중입니다. 각 문자열은 별도의 줄에 인쇄됩니다.

그러나 변수는 함수에 전달된 문자열 수에 따라 적절하게 결합되어야 합니다 frmt.printf

print ()
{
  case $1 in
    h|-h|-\?|--help)
      printf "Prints a text string.\n"
      printf "\$1 TEXT  Sentence to print.\n"
      local -r f=0
      ;;
    *)
      local -r f=1
      ;;
  esac

  local -r frmt="%s\n"
  printf $frmt "$@"
}

함수 매개변수의 개수를 이용하여 문자열을 반복하는 아이디어가 있었지만 printf실행되지 않았습니다.

local -r frmt=$(printf '%s\n' $(seq $#))

답변1

매개변수 수에 따라 형식 문자열을 작성할 필요가 없습니다.

견적으로 이동링크톰슨 씨:

  • 이것체재주장은필요한 경우 재사용주어진 모든 매개변수를 변환합니다. 예를 들어 이 명령 ‘printf %s a b’‘ab’.

테스트 코드를 작성합니다.

이와 같은 작업을 할 때 가능한 한 많이 분해하고 거기에서 빌드 양식을 얻으십시오. 예를 들어 귀하의 경우 :

시험

#! /bin/bash -

test1() {
    printf 'test1\n'
    printf 'ARG: "%s"\n' "$@"
}
test2() {
    printf 'test2\n'
    shift
    printf 'ARG: "%s"\n' "$@"
}
test3() {
    printf 'test3\n'
    printf '2-ARGS: "%s" "%s"\n' "$@"
}

test1 first a b "c d e"
printf '\n'
test2 first a b "c d e"
printf '\n'
test3 a b c d e

결과

test1
ARG: "first"
ARG: "a"
ARG: "b"
ARG: "c d e"

test2
ARG: "a"
ARG: "b"
ARG: "c d e"

test3
2-ARGS: "a" "b"
2-ARGS: "c" "d"
2-ARGS: "e" ""

이것은 아이디어를 주어야합니다


printf '%s\n' $(순서 $#)

local -r frmt=$(printf '%s\n' $(seq $#))

예를 들어 다음과 같은 결과가 발생합니다.

printf '%s\n' $(seq 3)
1
2
3

printf '%s\n' $(seq $#)항상 그렇듯이, 테스트 중인 항목을 가장 낮은 구성 요소(여기서 또는 실제로 ) 로 분류하고 seq $#셸에서 테스트하세요.

관련 정보