Wie bekomme ich $ (/bin/printf -6), um -6 zurückzugeben und nicht zu denken, dass -6 eine Option ist
Frage
Ich habe ein Bash -Shell -Skript, das die Zeile hat:
g=$(/bin/printf ${i})
Wenn ${i}
enthält so etwas wie -6
, printf
denkt, es wird eine Option übergeben. Es erkennt die Option nicht, so dass ein Fehler erzeugt wird.
Wenn ${i}
in Zitaten, printf
glaubt immer noch, dass es eine Option übergeben wird.
g=$(/bin/printf "${i}")
Wenn ich den Zitaten entkomme, Variable $g
dann hält "-6
"Welches ist auch nicht das, was ich will.
g=$(/bin/printf \"${i}\")
Gibt es weg, um dem Armaturenbrett zu entkommen (-).
printf ist eine Busybox -App
Lösung
Was ist, wenn Sie angerufen haben? printf
mit einer tatsächlichen Formatzeichenfolge?
$ printf "%d\n" -6
-6
$ /sbin/busybox printf "%d\n" -6
-6
$
Dies funktioniert anscheinend beide mit GNU CoreUtils 'und Busybox' Printf.
Andere Tipps
Die meisten GNU -Programme unterstützen die Verwendung --
Als Trennzeichen, das das Programm mitteilt, dass alle weiteren Argumente keine Optionen sind. Zum Beispiel
$ printf -- -6
-6
Du solltest benutzen
printf -- -6
Wenn Sie auf diese Weise ein nicht numerisches Argument füttern, erhalten Sie eine Fehlermeldung:
$ busybox printf "%d" "a"
a: conversion error
-1
Aber Sie können verwenden %s
Und es funktioniert sowohl für numerische als auch für nicht numerische Argumente (solange Sie keine Formatierung ausführen müssen):
$ busybox printf "%s" "a"
a
$ busybox printf "%s" -6
-6
Wenn Sie die Formatierungsfunktionen von nicht verwenden printf
und Sie müssen den Wert ohne neue Linie ausgeben, Busybox's echo
Befehl unterstützt -n
:
$ busybox echo -n "a"
a
$ busybox echo -n -6
-6