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

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

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

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

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

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

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

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

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

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

Ответы [ 4 ]

13 голосов
/ 23 октября 2009

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

$ printf -- -6
-6
7 голосов
/ 23 октября 2009

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

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

По-видимому, это работает и с GNU coreutils 'и busybox' printf.

0 голосов
/ 23 октября 2009

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

$ 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
0 голосов
/ 23 октября 2009

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

printf -- -6
...