¿Cómo obtengo $ (/ bin / printf -6) para devolver -6 y no creo que -6 sea una opción?

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

  •  06-07-2019
  •  | 
  •  

Pregunta

Tengo un script de shell bash que tiene la línea:

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

cuando $ {i} contiene algo como -6 , printf cree que se le está pasando una opción. No reconoce la opción por lo que produce un error.

si el recuadro $ {i} entre comillas, printf aún cree que se le está pasando una opción.

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

si me escapo de las comillas, la variable $ g luego mantiene " -6 " que tampoco es lo que quiero.

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

Está ahí para escapar del tablero (-).

printf es una aplicación de BusyBox

¿Fue útil?

Solución

¿Qué sucede si usted llama a printf con una cadena de formato real?

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

Esto funciona con GNU coreutils 'y busybox' printf, al parecer.

Otros consejos

La mayoría de los programas GNU admiten el uso de - como delimitador para indicar al programa que todos los argumentos adicionales no son opciones. Por ejemplo

$ printf -- -6
-6

Deberías usar

printf -- -6

Si alimenta un argumento no numérico de esta manera, recibirá un mensaje de error:

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

Pero puede usar % s y funcionará tanto para argumentos numéricos como no numéricos (siempre que no tenga que hacer ningún formato):

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

Si no está utilizando las funciones de formato de printf y necesita generar el valor sin una nueva línea, el comando echo de busybox admite -n :

$ busybox echo -n "a"
a
$ busybox echo -n -6
-6
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top