2012-10-05 25 views
11

natknąłem skrypt powłoki, która zawiera oświadczenie jak,

if [ $val -eq $? ] 

Co $? tu na myśli?

+0

[tutaj jest odpowiedź] [1], który można dopasować do kwestionujesz [1]: http://stackoverflow.com/questions/7101995/what-does-if-eq-0- skrypty średnie-na-powłoki? answerertab = aktywny # tab-top –

+0

możliwy duplikat [Jakie są specjalne zmienne powłoki znaku dolara?] (http://stackoverflow.com/questions/5163144/what-are-the-special -dollar-sign-shell-variables) – hammar

Odpowiedz

17
$? 

zwraca status ostatnio wykonanego polecenia. Status 0 mówi ci, że wszystko skończyło się dobrze.

Ponadto znak $ jest specjalnym symbolem - iw tym przypadku $val wyodrębnić wartość, która jest utrzymywana przez zmienną val

2

Jest to wartość statusu wyjścia poprzedniego polecenia. To jest 0 w przypadku powodzenia.

3

Co robi $? znaczy tutaj?

$? jest ostatnim rezultatem wyjścia statusie ... 0 jest domyślnie „udana”

bash# ls *.* 
bash# echo $? 
bash# 0 
bash# ls /tmp/not/existing/ 
bash# echo $? 
bash# 2 
17

$# = liczba argumentów. Odpowiedź brzmi: 3.

[email protected] = jakie parametry zostały przekazane. Odpowiedzią jest 1 2 3.

$? = Ostatnia operacja zakończyła się pomyślnie. Odpowiedź brzmi: 0, co oznacza "tak".

+0

Może to nie powinno mi przeszkadzać, ale fakt, że "0 == True" naprawdę miażdży mój sprzęt. – jmracek

12

Znalazłem, że link jest bardzo przydatny i jest świetną odpowiedzią. Zawiera wyraźne wyrażenie z próbką.

enter image description here

-1

ls *.* lub ls że ten sam wynik. Znaczenie pokazuje zero lub więcej plików z dowolnym rozszerzeniem w bieżącym katalogu.

echo $? wyświetli stan wyjścia. Jeśli co najmniej jeden plik zostanie wyświetlony z ostatniego polecenia, stanem wyjścia będzie zero (powodzenie).

+0

Niepoprawnie: 'ls *. *' Odfiltruje zawartość bieżącego katalogu i wyświetli tylko pliki i katalogi zawierające kropkę; dla katalogów wyświetli zawartość (może zależeć od implementacji). Spójrz również na następujące polecenie 'test mkdir && test && ls; echo" $? "Zwróci 0. Jednakże,' mkdir -m -r wo_dir && cd wo_dir && echo "test"> 1.txt && ls; echo "$?" 'zwróci 1, z komunikatem' ls:.: Permission denied' nawet jeśli plik zostanie utworzony. – artdanil