
printf
변수를 인쇄하는 데 사용하고 싶습니다 . 변수에는 %
백분율 기호가 포함될 수 있습니다.
최소한의 예:
$ TEST="contains % percent"
$ echo "${TEST}"
contains % percent
$ printf "${TEST}\n"
bash: printf: `p': invalid format character
contains $
( echo
원하는 출력을 제공합니다.)
답변1
printf
일반 형식으로 사용:
printf '%s\n' "${TEST}"
에서 man printf
:
SYNOPSIS printf FORMAT [ARGUMENT]...
당신은해야안 돼요오류 및 보안 허점이 발생할 수 있으므로 변수를 FORMAT 문자열에 전달하세요.
그런데:
%
형식의 일부로 기호를 사용하려면 기호를 입력해야 합니다 %%
. 예를 들면 다음과 같습니다.
$ printf '%d%%\n' 100
100%
답변2
주어진 형식 문자열에 변수 내용을 넣지 마십시오 printf
. 대신 이것을 사용하십시오:
printf '%s\n' "${TEST}"
답변3
printf
보장된 매개변수를 허용한 다음 전달한 내용에 따라 다양한 추가 매개변수를 허용합니다. 그래서 이렇게 :
printf '%07.2f' 5
이 되다:
0005.00
첫 번째 매개변수는 " format
"라고 하며 항상 존재합니다. 문자열이 포함되어 있지 않으면 %
단순히 인쇄됩니다. 그러므로:
printf Hello
간단히 생성하세요(기본 모드에서는 후행 줄 바꿈이 추가되지 않는다는 점에 유의할 가치가 있습니다 Hello
). echo
예제가 작동할 것으로 예상했지만, s 없이 문자열만 전달했기 때문에 이전에 (무의식적으로) 이를 남용했다는 사실에 의해 이미 오해 를 %
받았습니다 . 교체할 필요가 없으므로 기능은 와 동일합니다 .format
printf
echo -ne
네가 이걸 하고 싶다면옳은printf
, 내장된 대체 함수를 사용하여 인쇄 가능한 문자열을 형성할 수 있습니다. 내 코드에 다음과 같은 줄이 나타납니다.
printf '%20s: %6d %05d.%02d%%' "$key" $val $((val/max)) $((val*100/max%100))
지금 하고 있는 일이 제대로 작동하려면 echo -ne
다음과 같은 것이 필요합니다.
TEST="contains % percent"
echo -ne "${TEST}\n"
\
이는 해석 가능한 변수의 내부 이스케이프에 대한 (문제가 되는) 동작을 보존합니다. 제공 한 다음 뒷면을 붙이는 -n
것도 약간 어리석은 것처럼 보이지만 \n
현재 수행 중인 모든 작업에 적용할 수 있는 전역 찾기 및 바꾸기이기 때문에 제공합니다. 여전히 변수에서 이스케이프 작업을 수행하는 더 깨끗한 버전은 \
다음과 같습니다.
TEST="contains % percent"
echo -e "$TEST"