printf 동적 형식 지정을 위한 후행 공백 설정

printf 동적 형식 지정을 위한 후행 공백 설정

printf의 '%-6s' 형식을 동적으로 만드는 표준 방법이 있습니까?

function justify
{
echo "$(printf '%-6s' $1)"
}

형식에 변수를 삽입하려고 시도했지만오류 처리 형식실수.

$(printf '%-${2}s' ${1})

답변1

명령 대체를 에 전달하여 의도가 무엇인지 완전히 확신할 수 없지만 echo이렇게 하면 트릭을 수행할 수 있습니다.

justify() {
    printf "%-${2}s\n" "$1"
}

$1따옴표 없이 여러 매개변수를 전달하려면 를 사용하는 것이 좋습니다 "$@".

기존 시도에 대해 참고할 몇 가지 사항은 다음과 같습니다.

  1. 변수는 작은따옴표로 확장되지 않으며 큰따옴표를 사용하십시오.
  2. 명령 대체를 사용할 필요가 없으며 명령을 직접 호출하면 됩니다.
  3. (선택 사항) functionPOSIX가 아니므로 피하십시오.

답변2

쉘 변수는 작은따옴표 내에서 확장되지 않습니다. $문자 그대로의 달러 기호로 처리됩니다. ${2}쉘 변수로 확장 하려면 큰따옴표를 사용해야 합니다 .

printf "%-${2}s" ${1}

printf '%-6s' $1명령 대체를 사용하여 출력을 입력 인수로 전달하여 echocommand 로 인쇄된 공백 문자를 제거 하기 때문에 질문이 완전히 명확하지 않습니다 printf. 제 생각에는 귀하의 기능은 다음과 같이 작성하는 것이 더 좋습니다.

justify()
{
    printf "%-${2}s" $1
}

답변3

적어도 bash 4.4+에서는 C 스타일 1을 * 사용하여 너비 또는 정밀도로 사용 가능한 다음 인수에 액세스하는 것이 가능해 보입니다. 예를 들어:

justify ()
{
    printf '%-*sbar\n' "$2" "$1"
}

$ justify foo 6
foo   bar

( bar방금 포함된 접미사는 너비를 foo명확하게 하기 위한 것입니다.) 또는

pround ()
{
    printf '% *.*f\n' "$2" "$3" "$1"
}

$ pround 123.45678 12 3
     123.457

1man 3 printf 예시 보기

관련 정보