问题
I have a bash shell script which has the line:
g=$(/bin/printf ${i})
when ${i}
contains something like -6
, printf
thinks its being passed an option. It does not recognize the option so produces an error.
if wrap ${i}
in quotes, printf
still thinks its being passed an option.
g=$(/bin/printf "${i}")
if I escape the quotes, variable $g
then holds "-6
" which is not what I want either.
g=$(/bin/printf \"${i}\")
Is there away to escape the dash (-).
printf is a BusyBox app
回答1:
What if you called printf
with an actual format string?
$ printf "%d\n" -6
-6
$ /sbin/busybox printf "%d\n" -6
-6
$
This works with both GNU coreutils' and busybox' printf, apparently.
回答2:
Most GNU programs support using --
as a delimiter to tell the program that all further arguments are not options. For instance
$ printf -- -6
-6
回答3:
You should use
printf -- -6
回答4:
If you feed a non-numeric argument in this way, you get an error message:
$ busybox printf "%d" "a"
a: conversion error
-1
But you can use %s
and it will work for both numeric and non-numeric arguments (as long as you don't need to do any formatting):
$ busybox printf "%s" "a"
a
$ busybox printf "%s" -6
-6
If you're not using the formatting features of printf
and you need to output the value without a newline, busybox's echo
command supports -n
:
$ busybox echo -n "a"
a
$ busybox echo -n -6
-6
来源:https://stackoverflow.com/questions/1614028/how-do-i-get-bin-printf-6-to-return-6-and-not-think-6-is-an-option