Zamienniki ampersand i double-ampersand w PowerShell


28

W natywnym procesorze CMD systemu Windows można używać &do łączenia ciągów poleceń, dzięki czemu jedno z nich działa natychmiast po drugim. A &&uruchomi drugie polecenie tylko wtedy, gdy pierwsze zakończy się bez błędu.

Różni się to od poleceń potokowych wraz z |tym, że dane wyjściowe z pierwszego polecenia nie są wysyłane do drugiego polecenia, polecenia są po prostu uruchamiane jeden po drugim, a dane wyjściowe dla każdego z nich są wysyłane na swoje zwykłe miejsce.

Jednak pojawia się błąd podczas próby użycia &lub &&w programie PowerShell. Czy są dostępne podobne funkcje w PowerShell, czy też ta funkcja jest przestarzała?



Ciekawym pytaniem jest, czy można użyć metaprogramowania programu PowerShell w celu zapewnienia tej funkcji przy użyciu&&
soandos,

Odpowiedzi:


35

&Operator w PowerShell jest tylko ;lub średnikiem.

&&Operator w PowerShell ma być uruchamiany jako ifoświadczenia.

Command ; if($?) {Command}


1

Wypróbuj tę funkcję, której można używać mniej więcej w ten sam sposób:

function aa() {
    if($?) {
        $command = [string]::join(' ', $args[1..99])
        & $args[0] $command
    }
}

Teraz &&można go zastąpić ; aa, który choć wciąż nie jest idealny, jest o wiele bardziej zwięzły.

cls && build

staje się

cls; aa build

1
Jakiś nie-stylistyczny powód, którego używasz, args[0]a nie function aa ($cmd)?
ruffin

Jest to kruchy sposób wywoływania poleceń; używaj bloków skryptów, aby przekazywać polecenia i wywoływać je za pomocą ., nie &, ponieważ ten ostatni tworzy zakres potomny dla zmiennych.
mklement0
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.