Несмотря на то, что в других ответах объяснялось, как исправить скрипт, я задался вопросом, в чем технически заключается ошибка. Я думаю, что единственный допустимый синтаксис, в котором bash позволяет слову в команде быть без кавычек и без экранирования (
, - это определение функций. Итак, bash увидел (
и сразу подумал, что это должно быть определение функции с именем [
, но затем вы добавили '$#'
, а bash ожидал только )
, вот почему вы получили эту синтаксическую ошибку. Если это не должно было быть определением функции, то кто знает, для чего оно предназначалось. Все остальное после (
, кроме )
, вызвало бы ту же синтаксическую ошибку:
$ echo ( foo )
bash: syntax error near unexpected token `foo'
Если удалить то, что следует за (
, что не соответствует синтаксису определения функции, вы получите:
$ [ ( ) ( -f "$1" )
Что заканчивается определением функции[
:
$ [
bash: -f: command not found