Wie bekomme ich $ (/bin/printf -6), um -6 zurückzugeben und nicht zu denken, dass -6 eine Option ist

StackOverflow https://stackoverflow.com/questions/1614028

  •  06-07-2019
  •  | 
  •  

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

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top