Арифметическое расширение выполняется 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)
- вполне допустимый шелл-код. Он просто делает неправильные вещи.
Это чрезвычайно -эффективный способ использования printf()
без использования спецификаторов формата. Обычно вы определяете их, чтобы сообщить, какой тип вывода форматируется. Это должно было быть написано как
printf '%s\n' "-----------"
Такой, чтобы printf
соответствовал -----------
как строковому типу со спецификатором формата, который принимает строковое ключевое слово(%s
). \n
после спецификатора означает добавление новой строки после того, как строка будет напечатана.
С вашей попыткой, когда происходит удаление кавычек, printf
интерпретирует тире как один из своих флагов командной строки, который он не понимает.
Другой хакерский способ сделать это состоит в том, чтобы сообщитьprintf
о том, что его аргументы командной строки завершены, и интерпретировать содержимое, следующее за ним, как его аргументы. Большинство встроенных -ins и/или внешних команд оболочки поддерживают это, добавляя суффикс --
после ключевого слова команды, то есть как
printf -- "-----------\n"