Використання оператора && в операторі if


84

У мене є три змінні:

VAR1="file1"
VAR2="file2"
VAR3="file3"

Як використовувати &&оператор and ( ) у операторі if, подібному до цього:

if [ -f $VAR1 && -f $VAR2 && -f $VAR3 ]
   then ...
fi

Коли я пишу цей код, це видає помилку. Який правильний шлях?

Відповіді:


172

Отже, щоб ваш вираз працював, змінюючись &&на-a зробить свою справу.

Це правильно так:

 if [ -f $VAR1 ] && [ -f $VAR2 ] && [ -f $VAR3 ]
 then  ....

або подобається

 if [[ -f $VAR1 && -f $VAR2 && -f $VAR3 ]]
 then  ....

або навіть

 if [ -f $VAR1 -a -f $VAR2 -a -f $VAR3 ]
 then  ....

Ви можете знайти докладнішу інформацію в цьому запитанні bash: Кілька одинарних операторів у операторі if та деяких посиланнях, наведених там, наприклад Яка різниця між тестом, [та [[? .


14
Зверніть увагу, що POSIX рекомендує використовувати &&і ||з позначенням в одній дужці, -aі -oтому, якщо ви пишете портативний код, перейдіть до першого позначення, інакше до другого і пропустіть третього, тим більше, що він може бути незручним і важким для читання, якщо вам потрібно групувати вирази.
Адріан Фрюірт,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.