Как получить $ (/ 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
Решение
Что если вы вызвали 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