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

У меня есть сценарий оболочки Bash, который имеет строку:

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

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

если обернуть ${i} в кавычках, printf до сих пор думает, что его передали вариант.

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

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

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

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

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

4 ответа

Решение

Что делать, если вы позвонили 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's echo поддержка команд -n:

$ busybox echo -n "a"
a
$ busybox echo -n -6
-6
Другие вопросы по тегам