Chociaż nie mam odpowiedzi na pierwotne pytanie concering polecenia no-op, wielu (jeśli nie większość) problemy, gdy może się wydawać „w tej branży mam nic nie robić” można ominąć przez proste restrukturyzacja logiki, aby ta gałąź się nie pojawiła.
staram się dać ogólną zasadę za pomocą przykładu OPS
zrobić nic, gdy $ a jest większe niż "10" print "1", jeśli $ a jest mniejsze niż "5", w przeciwnym razie, print „2”
musimy unikać oddział gdzie $a
dostaje więcej niż 10 tak $a < 10
jak ogólny stan można zastosować do każdego innego, w następujących warunkach.
W ogólnym ujęciu, kiedy mówisz zrobić nic gdy X, następnie przeformułować go jako uniknąć oddział, gdzie X. Zwykle możesz zapobiec unikaniu, po prostu negując X i stosując go do wszystkich innych warunków.
Więc przykład OP z reguły stosowane mogą być zrestrukturyzowane jako:
if [ "$a" -lt 10 ] && [ "$a" -le 5 ]
then
echo "1"
elif [ "$a" -lt 10 ]
then
echo "2"
fi
Wystarczy odmianą powyższego, załączając wszystko w stanie $a < 10
:
if [ "$a" -lt 10 ]
then
if [ "$a" -le 5 ]
then
echo "1"
else
echo "2"
fi
fi
(w tym konkretnym przykładzie @Flimzys restructuring jest na pewno lepszy, ale chciałem podać ogólną zasadę dla wszystkich ludzi szukających, jak nic nie robić.)
dla edukacji,: jest operatorem, który uruchamia "true". W takich przypadkach bardzo podoba mi się prawdziwe, ponieważ jest o wiele łatwiejsze do odczytania. – SaintHax
@SaintHax Nie, nie działa "true". Jest wbudowany w powłokę i nic nie robi. – Barmar
to jest wbudowana w powłokę (masz rację), zwraca true (status 0), podobnie jak true, i jest trudniejsza do odczytania. Bash to język DevOps, a jeśli ':' jest napisane przez kogoś z mojego zespołu, chciałbym, żeby to zmienili. – SaintHax