printf의 대시


37

bash 스크립트에서 printf를 사용하여 예쁜 출력 형식을 지정하려고합니다.

예 :
-----------------------
| This is some output |
-----------------------

그러나 나는 이해하지 못하는 몇 가지 행동을 우연히 발견했습니다.

$ printf "--" 나에게 오류를 준다 printf: usage: printf [-v var] format [arguments]

그리고 $ printf "-stuff"결과-bash: printf: -s: invalid option

따라서 printf는 내가 아닌 동안 몇 가지 인수를 전달하려고한다고 생각합니다.

한편 우연히 우연히이 해결 방법을 찾았
$ printf -- "--- this works now ----\n"습니다.--- this works now ----

누구든지이 동작을 설명 할 수 있습니까?



intereset 밖에서, 그 구현 echo이 실패 할 것 echo ------------입니까? 대부분의 지원 -n(후행 줄 바꿈 없음), -e(백 슬래시 이스케이프 된 문자 해석) 및 가능한 -E(해석하지 마십시오) 다른 옵션과 같은 인수가 발생할 때 오류가 발생하지 않습니다. (편집 : GNU의 /bin/echo지원 --help--version.)
janmoesen

답변:


44

--어떤 다음은해야하는 프로그램 이야기하는 데 사용 하지 명령 줄로 해석 될 옵션 에를 printf.

편집 : 따라서 printf "--"당신은 기본적으로 "인수없는 printf" 로 끝나서 실패했습니다.


18
즉, 인쇄 --하려면을 실행할 수 있습니다 printf -- --.
l0b0

2
...와 printf --같은있다 printf(같은 메시지가)
Peter.O

25

-- 옵션으로 해석되고 있습니다 (이 경우 더 이상 옵션이 없음을 나타냄).

잘못된 해석을 방지하기 위해 사용할 때는 항상 형식 문자열을 포함 해야합니다 printf. 특별한 경우 :

printf '%s\n' '-----------------------'

시퀀스로이 작업을 수행해야하는 경우는 어떻습니까? printf '-%.0s' {1..54}
qodeninja

2
@qodeninja 그럼 당신은 실제로 어떻게 사용하려는를 --:-)printf -- '-%.0s' {1..54}
크리스 다운

4

printf 내장과 / usr / bin / printf 사이에는 차이점이 있습니다. 두 번째는 이러한 성가신 오류없이 "의미"를 의미합니다.

printf "-----"             # error
printf -- "-----"          # ok
/usr/bin/printf "-----"    # ok
/usr/bin/printf -- "-----" # ok
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.