Проверка, доступен ли файл для чтения и существует ли он в одном условии if: if [[-r -f "/file.png"]] - PullRequest
10 голосов
/ 11 января 2011

Я писал оператор 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'

Ответы [ 2 ]

13 голосов
/ 11 января 2011

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

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

4 голосов
/ 11 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...