2011-12-06 15 views
10

Czy ktoś mógłby wyjaśnić, co oznacza ten fragment kodu?Wyjaśnij ten fragment kodu

Wierzę, że druga linia jest „jeżeli status wyjścia jest równy zero”, a następnie echo „ważna komenda”, ale ja nie rozumiem pierwszy wiersz

[email protected] &>/dev/null 
if [[ $? = 0 ]] 
then 
    echo "Valid command" 
fi 

Odpowiedz

2

Chciałbym dodać, że jest to niepotrzebnie rozwlekły i może być skrócony do

if "[email protected]" &>/dev/null 
then 
    echo "Valid command" 
fi 

lub nawet krócej

"[email protected]" &>/dev/null && echo "Valid command" 
7

Pierwsza linia uruchamia polecenie utworzoną po prostu za wszystko argumenty do skryptu i przekierowanie wyjścia do/dev/null, które w zasadzie je wyrzuca.

Wbudowana zmienna [email protected] rozwija się do wszystkich parametrów pozycyjnych, przy czym każdy parametr jest ciągiem cytowanym, tzn. Parametry są przekazywane w stanie nienaruszonym, bez interpretacji lub rozszerzenia. Aby uzyskać ten efekt, uważam, że należy zacytować użycie zmiennej, tj. "[email protected]".

Operator &> przekierowuje zarówno stdout, jak i stderr.

+1

Wystarczy, aby wspierać: wyjaśnienie można znaleźć tutaj: http: // tldp .org/LDP/abs/html/internalvariables.html # APPREF – Yuri

+0

Myślę, że '$ *' i '$ @' są różne tylko w otoczeniu podwójnych cudzysłowów. – mkb

+1

@mkb: masz rację. Obawiam się, że "nie ma wiatru": bez określenia '' $ @ "' parametry zostaną rozdzielone, tj. 'funkcja TT() {$ @; }; TT ls 1 2 '3 4'' – choroba

4

Zgodnie z manual, [email protected] rozwija się do parametrów pozycyjnych, zaczynając od jednego. Jeśli wywołasz ten skrypt jako scripty.sh ls /, wykona on ls / podczas przekierowywania wszystkich danych wyjściowych do segmentu bitowego. To powinno odnieść sukces (mam nadzieję!), A więc skrypt wydrukuje Valid command. Jeśli nazwiesz to scripty.sh ls /some/nonexistent/directory, to polecenie ls powinno się nie powieść, a skrypt nie wyświetli niczego.

Uważam, że skrypt można ulepszyć, umieszczając podwójne cytaty wokół [email protected], aby argumenty zawierające spacje nie powodowały interwencji interpretera.

Wraz z [email protected] polecenie ls "/Library/Application Support" zostało rozwinięte do trzech słów. Z "[email protected]" jest on rozszerzony do dwóch, a komenda uruchamiana jest tak, jakby była bez pakowania skryptu.

Powiązane problemy