Używanie operatora && w instrukcji if

84

Mam trzy zmienne:

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

Jak używać &&operatora and ( ) w instrukcji if w następujący sposób:

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

Kiedy piszę ten kod, daje to błąd. Jaka jest właściwa droga?

Ziyaddin Sadigov
źródło

Odpowiedzi:

172

Aby Twoja ekspresja działała, zmiana &&na -awystarczy.

To jest poprawne w ten sposób:

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

lub jak

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

lub nawet

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

Dalsze szczegóły można znaleźć w tym pytaniu bash: Wiele operatorów jednoargumentowych w instrukcji if i niektóre podane tam odniesienia, takie jak Jaka jest różnica między test, [i [[? .

fedorqui 'SO przestań szkodzić'
źródło
14
Zwróć uwagę, że POSIX zaleca używanie &&i ||z notacją pojedynczego nawiasu ponad -ai -o, więc jeśli piszesz przenośny kod, przejdź do pierwszej notacji, w przeciwnym razie do drugiej i pomiń trzecią, zwłaszcza że może to być niewygodne i trudne do odczytania, jeśli potrzebujesz grupować wyrażenia.
Adrian Frühwirth