Voglio combinare più condizioni in un'istruzione shell e annullare la combinazione. Ho il seguente codice di lavoro per una semplice combinazione di condizioni:
if [ -f file1 ] && [ -f file2 ] && [ -f file3 ] ; then
# do stuff with the files
fi
Funziona benissimo. Se voglio negarlo, posso usare il seguente codice di lavoro:
if ! ( [ -f file1 ] && [ -f file2 ] && [ -f file3 ] ) ; then
echo "Error: You done goofed."
exit 1
fi
# do stuff with the files
Funziona anche come previsto. Tuttavia, mi viene in mente che non so cosa stanno effettivamente facendo le parentesi lì. Io voglio usarli solo per il raggruppamento, ma è in realtà la deposizione delle uova una subshell? (Come posso dirlo?) In tal caso, esiste un modo per raggruppare le condizioni senza generare una subshell?
if [[ ! -f file1 ]] && [[ ! -f file2 ]]; then
if [ ! 1 -eq 2 ] && [ ! 2 -eq 3 ]; then echo yep; fi
e funziona. Scrivo sempre sempre test con doppie parentesi graffe. Inoltre, per garantire che non lo sia bash
, ho ulteriormente testato if /bin/test ! 1 -eq 2 && /bin/test ! 2 -eq 3 ; then echo yep; fi
e funziona anche in questo modo.
[ ! -e file/. ] && [ -r file ]
lascerà cadere le directory. negalo come preferisci. certo, ecco cosa -d
fa.
if ! [ -f file1 ] || ! [ -f file 2 ] || ! [ -f file3 ] ; then
ma vorrei una risposta più generale.