Как получить $ (/ bin / printf -6) для возврата -6 и не думать, что -6 это вариант

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

  •  06-07-2019
  •  | 
  •  

Вопрос

У меня есть скрипт оболочки bash со строкой:

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

когда $ {i} содержит что-то вроде -6 , printf считает, что ему передана опция. Он не распознает опцию, поэтому выдает ошибку.

если $ {i} заключить в кавычки, printf по-прежнему считает, что ему передана опция.

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

если я экранирую кавычки, переменная $ g затем содержит " -6 " чего я тоже не хочу.

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

Есть ли там, чтобы избежать черты (-).

printf - приложение BusyBox

Это было полезно?

Решение

Что если вы вызвали printf с фактической строкой формата?

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

Очевидно, это работает как с GNU coreutils ', так и с busybox' printf.

Другие советы

Большинство программ GNU поддерживают использование - в качестве разделителя, чтобы сообщить программе, что все дальнейшие аргументы не являются опциями. Например,

$ printf -- -6
-6

Вы должны использовать

printf -- -6

Если вы введете нечисловой аргумент таким образом, вы получите сообщение об ошибке:

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

Но вы можете использовать % s , и он будет работать как с числовыми, так и с не числовыми аргументами (если вам не нужно выполнять форматирование):

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

Если вы не используете функции форматирования printf и вам нужно вывести значение без новой строки, команда busybox echo поддерживает -n :

$ busybox echo -n "a"
a
$ busybox echo -n -6
-6
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top