Я пытаюсь использовать printf для форматирования довольно симпатичного вывода в скрипте bash
например:
-----------------------
| This is some output |
-----------------------
Но я наткнулся на какое-то поведение, которое я не понимаю.
$ printf "--"
дает мне ошибку printf: usage: printf [-v var] format [arguments]
и
$ printf "-stuff"
приводит к-bash: printf: -s: invalid option
Так что, очевидно, printf думает, что я пытаюсь передать некоторые аргументы, а я нет.
Между тем, совершенно случайно, я нашел этот обходной путь:
$ printf -- "--- this works now ----\n"
дает мне--- this works now ----
Кто-нибудь может объяснить это поведение?
echo
, которые потерпят неудачу при выполненииecho ------------
? Большинство из них только поддерживают-n
(без завершающего символа новой строки),-e
(интерпретируют символы с обратной косой чертой) и возможны-E
(НЕ интерпретируют их) и не выдают ошибку при обнаружении других аргументов, подобных опции, верно? (РЕДАКТИРОВАТЬ: GNU/bin/echo
также поддерживает--help
и--version
.)Ответы:
--
Используется , чтобы сообщить программе , что все , что следует должны не быть интерпретированы как в командной строке опции кprintf
.Изменить: Таким образом,
printf "--"
вы пытались в основном как «printf без аргументов» и, следовательно, не удалось.источник
--
вы можете запуститьprintf -- --
.printf --
же, какprintf
(вы получаете то же сообщение)printf -- $fmt
это не портативный. На busybox 1.30.1printf -- '%s\n' hello
уступает--
. Смотрите также: pubs.opengroup.org/onlinepubs/009695399/utilities/printf.html--
интерпретируется как опция (в данном случае, чтобы показать, что больше нет опций).Строка формата всегда должна быть включена при использовании,
printf
чтобы предотвратить неверную интерпретацию. Для вашего конкретного случая:источник
printf '-%.0s' {1..54}
--
:-)printf -- '-%.0s' {1..54}
Есть различия между встроенной функцией printf и / usr / bin / printf, вторая делает «то, что вы имеете в виду» без этих досадных ошибок.
источник