Como faço para obter $ (/bin/printf -6) retornar -6 e não acho que -6 é uma opção

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

  •  06-07-2019
  •  | 
  •  

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

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top