bash 스크립트에서 멋진 출력 형식을 지정하기 위해 printf를 사용하려고 합니다.
예를 들어:
-----------------------
| This is some output |
-----------------------
그러나 나는 이해하지 못하는 몇 가지 행동을 우연히 발견했습니다.
$ printf "--"
나에게 오류가 발생합니다 :
printf: 사용법: printf [-v var] 형식 [매개변수]
그리고
$ printf "-stuff"
밝혀지다
-bash: printf: -s: 잘못된 옵션
그래서 분명히 printf는 내가 몇 가지 주장을 전달하려고 한다고 생각하지만 그렇지 않습니다.
그러던 중 우연히 다음과 같은 해결 방법을 발견했습니다.
$ printf -- "--- this works now ----\n"
나에게주세요
--- this works now ----
누구든지 이 동작을 설명할 수 있나요?
답변1
--
다음에 오는 것은 무엇이든 되어야 한다고 프로그램에 알리는 데 사용됩니다 .아니요명령줄로 해석됨옵션도착하다 printf
.
따라서 printf "--"
시도의 결과는 기본적으로' printf
논쟁 없음'그러므로 실패했습니다.
답변2
--
옵션으로 해석됩니다(이 경우 더 이상 옵션이 없음을 의미).
형식 문자열은 다음과 같습니다.언제나printf
잘못된 해석을 방지하기 위해 사용될 때 포함됩니다 . 특정 사례의 경우:
printf '%s\n' '-----------------------'
답변3
printf 내장과 /usr/bin/printf 사이에는 차이가 있습니다. 두 번째 것은 이러한 성가신 오류 없이 "당신이 의미하는 것"입니다.
printf "-----" # error
printf -- "-----" # ok
/usr/bin/printf "-----" # ok
/usr/bin/printf -- "-----" # ok
답변4
POSIX는 8진수 인코딩을 사용하는 옵션을 제공합니다.
printf "--"
다음과 같이 될 수 있습니다:
printf "\055-"
--
이는 형식 문자열을 사용할 것인지 옵션 끝 태그를 사용할 것인지에 대한 모호함을 피하기 위한 이식 가능한 방법입니다 .