Printf - печатать повторяющиеся символы минус [дубликат]

Арифметическое расширение выполняется bash и некоторыми другими оболочками с помощью $ ((...)) , например

line_count=$(( line_count/3 ))

С помощью line_count = $ (line_count) / 3 вы назначаете вывод команды line_count переменной line_count с суффиксом / 3 .

Вот почему вы получаете ошибку «line_count: command not found», а затем вывод / 3 .

Взгляните на ShellCheck на https://www.shellcheck.net/ Он может проверить ваш скрипт на наличие распространенных проблем. В этом случае это не поможет вам определить, что $ (...) должно было быть $ ((...)) , но это потому, что $ ( line_count) - вполне допустимый шелл-код. Он просто делает неправильные вещи.

1
26.12.2018, 07:27
1 ответ

Это чрезвычайно -эффективный способ использования printf()без использования спецификаторов формата. Обычно вы определяете их, чтобы сообщить, какой тип вывода форматируется. Это должно было быть написано как

printf '%s\n' "-----------"

Такой, чтобы printfсоответствовал -----------как строковому типу со спецификатором формата, который принимает строковое ключевое слово(%s). \nпосле спецификатора означает добавление новой строки после того, как строка будет напечатана.

С вашей попыткой, когда происходит удаление кавычек, printfинтерпретирует тире как один из своих флагов командной строки, который он не понимает.

Другой хакерский способ сделать это состоит в том, чтобы сообщитьprintfо том, что его аргументы командной строки завершены, и интерпретировать содержимое, следующее за ним, как его аргументы. Большинство встроенных -ins и/или внешних команд оболочки поддерживают это, добавляя суффикс --после ключевого слова команды, то есть как

printf -- "-----------\n"
2
27.01.2020, 23:31

Теги

Похожие вопросы