Я хочу написать простой цикл, подобный этому:
for f in my_file0 my_file1 my_file2; do
(( $(find . -name $f | wc -l > 0 ))
done
Однако, я хочу, чтобы цикл сломал сценарий, если произошел сбой, и напечатал сообщение об ошибке, поэтому я сделал это:
for f in my_file0 my_file1 my_file2; do
(( $(find . -name $f | wc -l > 0 )) || echo error && exit 1
done
, который выходит на первой итерации, очевидно.
Итак, я перешел к этому решению
for f in my_file0 my_file1 my_file2; do
(( $(find . -name $f | wc -l > 0 )) || (echo error && exit 1)
done
, которое, насколько я понимаю, выходит только из под-оболочки: - (
Итак, теперь я пишу это так :
for f in my_file0 my_file1 my_file2; do
(( $(find . -name $f | wc -l > 0 ))
if (( $? > 0 )); then echo error && exit 1; fi
done
но это отстой ...
Что я могу сделать, кроме вызова функции, которая будет выполнять эти две команды?
Используйте фигурные скобки вместо круглых скобок, что каждый не порождает новую подоболочку:
... || { echo error; exit 1; }
Уведомление, что †“, в отличие от этого, с круглыми скобками †“необходимо будет поместить точку с запятой даже после последнего оператора.
Также примечание, которое я изменил &&
в ;
, я думаю, что необходимо даже выйти если echo
сбои по любой маловероятной причине; не стесняйтесь возвращать это, если Вы действительно хотите продолжить цикл если echo
сбои.