Как получить $(/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
Если вы введете нечисловой аргумент таким образом, вы получите сообщение об ошибке:
$ 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