Czy nie byłoby miło, gdyby „test” miał opcję natychmiastowego wyprowadzenia wartości? Po prostu opcja. To wszystko, czego potrzebowalibyśmy.
Todd Walton,
Odpowiedzi:
15
Dostajesz 0 lub 1. W kodzie wyjścia.
bash-4.2$ test 4-lt 6
bash-4.2$ echo $?0
bash-4.2$ test 4-gt 6
bash-4.2$ echo $?1
Aktualizacja : Aby zapisać kod wyjścia do późniejszego wykorzystania, wystarczy przypisać go do zmiennej:
bash-4.2$ test 4-lt 6
bash-4.2$ first=$?
bash-4.2$ test 4-gt 6
bash-4.2$ second=$?
bash-4.2$ echo "first test gave $first and the second $second"
first test gave 0 and the second 1
Nie. Można przekierowywać tylko dane wyjściowe. W każdym razie zazwyczaj nie ma takiej potrzeby. Aby zapisać go do późniejszego wykorzystania, wystarczy przypisać go do zmiennej. Lub powiedz nam, jaki dokładnie jest twój zamiar z tą wartością.
manatwork
2
Kod wyjścia jest umieszczany w $?zmiennej - przynajmniej dopóki nie zostanie zastąpiony przez następne wykonywane polecenie.
Shadur
1
PS: Można korzystać z $PIPESTATUStablicy , aby uzyskać wynik wielu poleceń w rurociągu. $?będzie przez wynikać z ostatniego polecenia w rurociągu, jeżeli opcja jest wyłączona (ustawienie domyślne). pipefail
l0b0,
@ indieman, jeśli potrzebujesz zrobić coś innego w oparciu o status wyjścia, nawet nie musisz go zapisywać - po prostu użyjif test 4 -lt 6; then echo test succeeeded; else echo test failed; fi
Wildcard
5
Innym sposobem jest
test 4-lt 6&& echo 1|| echo 0
Ale bądź ostrożny w takim przypadku. Jeśli testzwroty zakończą się sukcesem i zakończą się echo 1niepowodzeniem, echo 0zostaną wykonane.
Jeśli chcesz uzyskać wynik porównania standardowego wyjścia zamiast kodu wyjścia, możesz użyć expr(1)polecenia:
$ expr 4'<='61
Dwie rzeczy do zapamiętania:
prawdopodobnie będziesz musiał zacytować operatora, ponieważ wiele z nich powoduje konflikt z metaznakami powłoki
wartość wyjściowa jest przeciwieństwem kodu powrotu dla test. testzwraca 0 dla true (co jest standardem dla kodów wyjścia), ale exprdrukuje 1 dla true.
Odpowiedzi:
Dostajesz 0 lub 1. W kodzie wyjścia.
Aktualizacja : Aby zapisać kod wyjścia do późniejszego wykorzystania, wystarczy przypisać go do zmiennej:
źródło
$?
zmiennej - przynajmniej dopóki nie zostanie zastąpiony przez następne wykonywane polecenie.$PIPESTATUS
tablicy , aby uzyskać wynik wielu poleceń w rurociągu.$?
będzie przez wynikać z ostatniego polecenia w rurociągu, jeżeli opcja jest wyłączona (ustawienie domyślne).pipefail
if test 4 -lt 6; then echo test succeeeded; else echo test failed; fi
Innym sposobem jest
Ale bądź ostrożny w takim przypadku. Jeśli
test
zwroty zakończą się sukcesem i zakończą sięecho 1
niepowodzeniem,echo 0
zostaną wykonane.źródło
Jeśli chcesz uzyskać wynik porównania standardowego wyjścia zamiast kodu wyjścia, możesz użyć
expr(1)
polecenia:Dwie rzeczy do zapamiętania:
test
.test
zwraca 0 dla true (co jest standardem dla kodów wyjścia), aleexpr
drukuje 1 dla true.źródło
test
wbudowana powłoka, która jest znacznie szybsza (około 50 razy na mojej maszynie) niżtest
iexpr
pliki wykonywalne z pakietu coreutils .Możesz wpisać następujące polecenie:
źródło