Como faço para obter $ (/bin/printf -6) retornar -6 e não acho que -6 é uma opção
Pergunta
Eu tenho um script de shell bash que tem a linha:
g=$(/bin/printf ${i})
quando ${i}
contém algo como -6
, printf
acha que está sendo aprovado uma opção. Ele não reconhece a opção, então produz um erro.
Se envolver ${i}
em citações, printf
ainda pensa que está sendo aprovado uma opção.
g=$(/bin/printf "${i}")
Se eu escapar das citações, variável $g
então segura "-6
"Que também não é o que eu quero.
g=$(/bin/printf \"${i}\")
Está lá fora para escapar do painel (-).
printf é um aplicativo BusyBox
Solução
E se você ligasse printf
com uma string de formato real?
$ printf "%d\n" -6
-6
$ /sbin/busybox printf "%d\n" -6
-6
$
Isso funciona com o Printf de Printf, de Coreutils e Busybox ', do GNU CoreUtils, aparentemente.
Outras dicas
A maioria dos programas GNU suporta usar --
Como delimitador, informar ao programa que todos os argumentos adicionais não são opções. Por exemplo
$ printf -- -6
-6
Você deveria usar
printf -- -6
Se você alimentar um argumento não numérico dessa maneira, receberá uma mensagem de erro:
$ busybox printf "%d" "a"
a: conversion error
-1
Mas você pode usar %s
E funcionará para argumentos numéricos e não numéricos (desde que você não precise fazer nenhuma formatação):
$ busybox printf "%s" "a"
a
$ busybox printf "%s" -6
-6
Se você não está usando os recursos de formatação de printf
E você precisa gerar o valor sem uma nova linha, BusyBox's echo
Comando suporta -n
:
$ busybox echo -n "a"
a
$ busybox echo -n -6
-6