Удобство руководств, установленных в вашей системе, заключается в том, что они описывают то, что установлено в системе.
Если базовым системным компилятором является компилятор C C89 или C99, то это будет отражено в установленных руководствах по функциям стандартной библиотеки C.
При установке пакета, включающего компилятор C11, скорее всего также будут установлены библиотеки времени выполнения C, утилиты и документация. Эти новые страницы руководств могут быть доступны по альтернативному пути по сравнению с руководствами по базовой системе.
См. раздел SEARCH PATH FOR MANUAL PAGES
в руководстве man
, чтобы узнать, как изменить путь поиска для справочных страниц, а затем выяснить, где установлены новые руководства. (это зависит от того, как вы установили компилятор и связанные вещи ).
[
— это команда, так что проблема в том, как вы пытаетесь использовать несколько условий. Вы хотите это:
if [ "$#" -eq 1 ] && [ -f "$1" ]; then
Здесь есть две проблемы. Во-первых, простая встроенная команда [
не может содержать &&
. Если вы хотите объединить несколько условий, вам нужно несколько[
:
if [ "$#" -eq 1 ] && [ -f "$1" ]; then
Во-вторых, вы не можете использовать одинарные кавычки вокруг $#
, так как это необходимо расширить. Ваша версия с '$#' -eq 1
сравнивала строку $#
с числом 1.
Все становится намного проще, если вы используете ключевое слово bash [[
вместо этого:
if [[ "$#" -eq 1 && -f "$1" ]]; then
Несмотря на то, что в других ответах объяснялось, как исправить скрипт, я задался вопросом, в чем технически заключается ошибка. Я думаю, что единственный допустимый синтаксис, в котором bash позволяет слову в команде быть без кавычек и без экранирования (
, - это определение функций. Итак, bash увидел (
и сразу подумал, что это должно быть определение функции с именем [
, но затем вы добавили '$#'
, а bash ожидал только )
, вот почему вы получили эту синтаксическую ошибку. Если это не должно было быть определением функции, то кто знает, для чего оно предназначалось. Все остальное после (
, кроме )
, вызвало бы ту же синтаксическую ошибку:
$ echo ( foo )
bash: syntax error near unexpected token `foo'
Если удалить то, что следует за (
, что не соответствует синтаксису определения функции, вы получите:
$ [ ( ) ( -f "$1" )
Что заканчивается определением функции[
:
$ [
bash: -f: command not found