было ошибкой.

ал оператор if, который проверял, доступен ли файл для чтения и существует, выполнив следующие действия:

if [[ -r "$upFN" && -f "$upFN" ]]; then
....
fi

Тогда я подумал, что вы можете сделать это меньше, что-то вроде этого:

if [[ -r -f "$upFN" ]]; then
....
fi

Но это не работает, оно возвращает ошибки:

./ftp.sh: line 72: syntax error in conditional expression
./ftp.sh: line 72: syntax error near `"$upFN"'
./ftp.sh: line 72: `if [[ -r -f "$upFN" ]]; then'
 Mint11 янв. 2011 г., 04:36
Ой, не хотел иметь / folder / в заголовке: P
 dreamlax11 янв. 2011 г., 04:28
-f для файлов,-d для каталогов.

Ответы на вопрос(2)

не существовать? Не беспокойтесь о проверке существования, когда читабельность покажет вам все, что вам нужно.

 Mint11 янв. 2011 г., 04:28
Я думал, что -f и -r никогда не удастся, если файл не существует, никогда не слышал о -e, придется проверить человека.
 Rob Kennedy01 июн. 2016 г., 14:03
Да, Олив. Именно на это указал Д. Шоули - различие между-f а также-e, Я не думаю, что это важное различие в этом случае, потому что я думаю, что монетный двор верил-f вести себя как-e все это время. То есть, я думаю, что оригинальное использование-f было ошибкой.
 Oliv01 июн. 2016 г., 13:53
Я только что понял, что есть случай, когда-r <file> это правда и-f <file> && -r <file> не: для читаемого каталога.
 D.Shawley11 янв. 2011 г., 04:19
-r проверяет читаемость и-f проверяет нафайл это существует.-r часть может быть успешной для каталога и-f не удастся. Пост не упомянул это-f требует, чтобы элемент был файлом.-e проверяет существование.
 D.Shawley11 янв. 2011 г., 04:48
Решение Вопроса

нет возможности объединить их дальше. Как примечание переносимости,[[ expr ]] менее портативный, чем[ expr ] или жеtest expr, С-стиль&& а также|| включены только в bash, так что вы можете рассмотреть возможность использования синтаксиса POSIX-a заа также а также-o заили же, Лично я предпочитаю использоватьtest expr так как это очень явно. Многие оболочки (включая bash) содержат встроенные функции, поэтому вам не нужно беспокоиться о затратах на создание процессов.

В любом случае я бы переписал ваш тест как:

if test -r "$upFN" -a -f "$upFN"
then
  ...
fi

Этот синтаксис будет работать в традиционных оболочках Bourne, Korn и Bash. Вы можете использовать[ синтаксис переносимо так же хорошо.

 Dennis Williamson11 янв. 2011 г., 12:58
Так когда же следует использовать специфичные для Bash функции?
 Mint11 янв. 2011 г., 04:54
Я всегда думал, что [[expr]] безопаснее [expr] при использовании переменных в них. Я не знал, что || и && работает только в bash, будет использовать -a -o, как вы и предлагали. ура

Ваш ответ на вопрос