¿Cómo obtengo $ (/ bin / printf -6) para devolver -6 y no creo que -6 sea una opción?
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
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