$ (/bin/printf -6)가 -6을 반환하고 -6이라고 생각하지 않으려면 어떻게해야합니까?
문제
선이있는 배쉬 쉘 스크립트가 있습니다.
g=$(/bin/printf ${i})
언제 ${i}
같은 것을 포함합니다 -6
, printf
옵션이 전달되고 있다고 생각합니다. 옵션을 인식하지 못하므로 오류가 발생합니다.
랩 ${i}
따옴표로, printf
여전히 옵션이 통과되고 있다고 생각합니다.
g=$(/bin/printf "${i}")
인용문을 피하면 변수입니다 $g
그런 다음 보유-6
"내가 원하는 것이 아닙니다.
g=$(/bin/printf \"${i}\")
대시를 피하기 위해 떨어져 있습니까 (-).
Printf는 BusyBox 앱입니다
해결책
당신이 전화했다면 어떨까요? printf
실제 형식 문자열로?
$ printf "%d\n" -6
-6
$ /sbin/busybox printf "%d\n" -6
-6
$
이것은 GNU Coreutils와 BusyBox 'Printf'와 함께 작동합니다.
다른 팁
대부분의 GNU 프로그램은 사용을 지원합니다 --
프로그램에 모든 추가 논쟁이 옵션이 아니라고 말하는 구분표로서. 예를 들어
$ printf -- -6
-6
당신은 사용해야합니다
printf -- -6
이런 식으로 숫자가 아닌 인수를 공급하면 오류 메시지가 나타납니다.
$ busybox printf "%d" "a"
a: conversion error
-1
그러나 당신은 사용할 수 있습니다 %s
그리고 숫자와 비 숫자 인수 모두에서 작동합니다 (어떤 형식도 할 필요가없는 한) :
$ busybox printf "%s" "a"
a
$ busybox printf "%s" -6
-6
형식 기능을 사용하지 않는 경우 printf
그리고 Newline, Busybox 's없이 값을 출력해야합니다. echo
명령 지원 -n
:
$ busybox echo -n "a"
a
$ busybox echo -n -6
-6
제휴하지 않습니다 StackOverflow