printf의 '%-6s' 형식을 동적으로 만드는 표준 방법이 있습니까?
function justify
{
echo "$(printf '%-6s' $1)"
}
형식에 변수를 삽입하려고 시도했지만오류 처리 형식실수.
$(printf '%-${2}s' ${1})
답변1
명령 대체를 에 전달하여 의도가 무엇인지 완전히 확신할 수 없지만 echo
이렇게 하면 트릭을 수행할 수 있습니다.
justify() {
printf "%-${2}s\n" "$1"
}
$1
따옴표 없이 여러 매개변수를 전달하려면 를 사용하는 것이 좋습니다 "$@"
.
기존 시도에 대해 참고할 몇 가지 사항은 다음과 같습니다.
- 변수는 작은따옴표로 확장되지 않으며 큰따옴표를 사용하십시오.
- 명령 대체를 사용할 필요가 없으며 명령을 직접 호출하면 됩니다.
- (선택 사항)
function
POSIX가 아니므로 피하십시오.
답변2
쉘 변수는 작은따옴표 내에서 확장되지 않습니다. $
문자 그대로의 달러 기호로 처리됩니다. ${2}
쉘 변수로 확장 하려면 큰따옴표를 사용해야 합니다 .
printf "%-${2}s" ${1}
printf '%-6s' $1
명령 대체를 사용하여 출력을 입력 인수로 전달하여 echo
command 로 인쇄된 공백 문자를 제거 하기 때문에 질문이 완전히 명확하지 않습니다 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
예시 보기