bash: несколько унарных операторов в операторе if

возможно ли иметь несколько унарных операторов в операторах if.. Вот фрагмент кода, который дает мне ошибку.

пожалуйста, исправьте код здесь.

if [ -f $input_file ] -a [ -f $output_file ] -a [ -f $log_file ] ]
then
### Some Code here
fi

спасибо Киран!--2-->

4 ответов


if [ -f "file1" -a -f "file2" -a "file3" ]; then
   #some code
fi

Если вы используете двойную скобку Bash, вы можете сделать это:

if [[ -f "$input_file" && -f "$output_file" && -f "$log_file" ]]

который я считаю более чистым для чтения, чем другие варианты, показанные здесь (но это субъективно). Тем не менее, это другие преимущества.

, а как ghostdog74 показывает, вы всегда должны указывать переменные, содержащие имена.


вы можете увидеть [ ... ] оператор только как ярлык для test .... Параметры используются таким же образом.

Так что в вашем случае можно написать ghostdog74 или :

if [ -f $input_file ] && [ -f $output_file ] && [ -f $log_file ]
then
### Some Code here
fi

[ - это команда, а не if заявление. Таким образом, вы должны передать ему каждый из соответствующих аргументов, а не пытаться неправильно запустить его, как у вас есть.

if [ arg1 arg2 arg3 arg4 ... ]
then