Czasami podczas tworzenia warunków warunkowych kod nic nie robi, np. Chcę, aby Bash nic nie robił, gdy $a
jest większy niż „10”, wypisuje „1”, jeśli $a
jest mniejszy niż „5”, w przeciwnym razie wypisuje „2”:
if [ "$a" -ge 10 ]
then
elif [ "$a" -le 5 ]
then
echo "1"
else
echo "2"
fi
To jest jednak błąd. Czy istnieje polecenie, które nic nie zrobi, a także nie spowolni mojego skryptu?
bash
conditional
noop
Wioska
źródło
źródło
true
. Jest wbudowany w powłokę i nic nie robi.:
jest napisany przez kogoś z mojego zespołu, powinienem go zmienić.true
w kontekście bezwarunkowym, kazałbym mu to zmienić.if true
jest w porządku,then true
wydaje się źle.if ! condition; then do something; fi
zamiastif condition; then :; else do something; fi
.Prawdopodobnie możesz po prostu użyć
true
polecenia:Alternatywą w Twoim przykładzie (ale niekoniecznie wszędzie) jest ponowne zamówienie if / else:
źródło
true
i nie będziesz w stanie nic zrobić,false
jeśli chodzi o skrypt, ale w zasadzie mogą one mieć rozwidlenie w niektórych powłokach, które akceptują tę składnię, więc być może:
jest lepiej.true
ifalse
są wbudowane. Dla starszych muszli,true
,false
, a nawet:
może być polecenia zewnętrzne (choć prawdopodobnie chcesz zobaczyć ten ostatni tylko w bardzo starych powłok).:
po prostu dlatego, że jest to bardziej wyraźne, jaki jest celChociaż nie odpowiadam na pierwotne pytanie dotyczące polecenia no-op, wiele (jeśli nie większość) problemów, gdy ktoś może pomyśleć „ w tej gałęzi nie muszę nic robić ”, można ominąć, po prostu przebudowując logikę , aby ta gałąź wygrała nie występuje.
Postaram się podać ogólną zasadę na przykładzie PO
musimy unikać gałęzi, w której
$a
dostaje się więcej niż 10, aby$a < 10
warunek ogólny można było zastosować do każdego kolejnego warunku.W ogólnym ujęciu, kiedy mówisz zrobić nic gdy X , a następnie go przeformułować jak uniknąć oddział, gdzie X . Zwykle możesz sprawić, że unikanie się wydarzy, po prostu negując X i stosując go do wszystkich innych warunków.
Zatem przykład PO z zastosowaną regułą można przekształcić w następujący sposób:
Tylko odmiana powyższego, obejmująca wszystko w
$a < 10
stanie:(W tym konkretnym przykładzie restrukturyzacja @Flimzys jest z pewnością lepsza, ale chciałem podać ogólną zasadę dla wszystkich ludzi, którzy szukają sposobu na nic nie robić.)
źródło
echo "put stuff here"
go, zepsuje to niektóre z zastosowań niezwiązanych z logowaniem (np. Scp zostanie zepsuty), a tylko białe spacje / komentarze powodują błąd w czasie wykonywania.