2009-10-23 1 views
4

옵션은 $를받을 수 있나요 :어떻게 (/ 빈 /의 printf -6) 생각 반환 -6하지 -6 나는 라인을 가지고 bash 쉘 스크립트를

g=$(/bin/printf ${i}) 

${i} 뭔가를 포함 -6처럼 printf은 옵션이 전달 된 것으로 생각합니다. 옵션을 인식하지 못하므로 오류가 발생합니다.

따옴표 안에 ${i}을 감싸는 경우, printf은 여전히 ​​옵션이 전달된다고 생각합니다. 나는 따옴표를 벗어날 경우

g=$(/bin/printf "${i}") 

는 변수 $g는 나도 원하지 않을 것이다 "-6"을 보유하고 있습니다.

g=$(/bin/printf \"${i}\") 

대시 (-)를 벗어날 수 있습니까?

의 printf는

답변

7

당신이 실제 형식 문자열 printf라고하면 어떻게 사용해야합니까?

$ printf "%d\n" -6 
-6 
$ /sbin/busybox printf "%d\n" -6 
-6 
$ 

이것은 분명히 GNU coreutils와 busybox 'printf 모두에서 작동합니다.

+0

이 작동합니다 - 스크립트가하지 않는 이유가 있다고 생각합니다 이미. 그냥 에코를 사용하면됩니다. 그러나 그것은 현재 작동하지만, 더 나은 해결책을 가진 누군가라면, 나는 흥미로울 것이다. – Andrew

+0

글쎄, % d의 질문 일 뿐이라면 ...'g = $ i'를 할 수 있고 다른 프로세스를 전혀 호출하지 않고 끝낼 수 있습니다. – ndim

+0

$ {i}은 아무거나, 숫자, 문자열 등일 수 있습니다. '-'로 시작하는 값은 printf를 실패하게 만듭니다. – Andrew

12

대부분의 GNU 프로그램은 모든 추가 인수가 옵션이 아닌 프로그램을 알려줄 수있는 구분 기호로 -- 사용을 지원 비지 박스 응용 프로그램입니다. 예를

$ printf -- -6 
-6 
+0

감사합니다. 그게 작동하지만 내 printf는 그 옵션을 지원하지 않는 BusyBox 버전입니다. 다른 아이디어. – Andrew

+0

@Andrew이 경우 ndim이 제안한 형식 문자열이 아마도 사용 방법 일 것입니다. 귀하의 질문에 busybox 태그를 추가 했으므로 앞으로의 독자들에게 분명합니다. –

+0

busybox의 새 버전도 충분히 -':'지원합니다 : busybox printf -6는 busybox 1.27.2와 함께'-6'을 출력합니다. –

1

를 들어 당신은

printf -- -6 
0

이 방법으로 숫자가 아닌 인수를 공급하면 오류 메시지가 얻을 :

$ busybox printf "%d" "a" 
a: conversion error 
-1 

을하지만만큼 (당신은 %s를 사용하고 숫자와 숫자가 아닌 인수를 모두 작동합니다 당신이) 서식을 수행 할 필요가 없습니다 : 당신이 printf의 서식 기능을 사용하지 않는 경우

$ busybox printf "%s" "a" 
a 
$ busybox printf "%s" -6 
-6 

당신이 줄 바꿈없이 출력 값을 필요로, 비지 박스의 echo 명령은 -n 지원 :

$ busybox echo -n "a" 
a 
$ busybox echo -n -6 
-6