printf에서 대시

printf에서 대시

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-"

--이는 형식 문자열을 사용할 것인지 옵션 끝 태그를 사용할 것인지에 대한 모호함을 피하기 위한 이식 가능한 방법입니다 .

관련 정보