Kategorie szkoleń | Egzaminy | Kontakt
  • 1
  • 3
  • 601

W jaki sposób wykonać polecenie przypisane do zmiennej w PowerShell, tak jak w bashu? Na przykład w bashu można wykonać następującą operację przypisania polecenia do zmiennej i wykonania: c=ls $c. Dzięki temu mogę polecenie, w tym przypadku ls, wykonać wywołując zmienną $c.

Uczestnik szkolenia
  • Zapytał
  • @ Uczestnik szkolenia | 24.06.2014
Komentarze (4)
Lepszym rozwiązaniem, niż tworzenie zmiennych z poleceniem, jest tworzenie aliasów:
$ alias c=ls
$ c
Skomentował : @ TRENER ALTKOM AKADEMII ,24.06.2014
Artur, cenna uwaga niestety aliasy działają podobnie w obydwu przypadkach :)
Skomentował : @ TRENER ALTKOM AKADEMII ,24.06.2014
Zaloguj się aby zadać pytanie
Pokrewne

Odpowiedź (1)

  • 5

Rzeczywiście w PowerShellu istnieje możliwość wykonania poleceń zapisanych w zmiennej, ale mechanizm ten działa inaczej niż w bashu. W związku z tym warto przeanalizować to zachowanie na przykładzie.
Dla uproszczenia w scenariuszu założymy następujące kroki:

  1. wylistowanie zawartości katalogu (poleceniem ls)
  2. przypisanie do zmiennej c polecenia listującego zawartość katalogu (ls)
  3. wywołanie polecenia za pomocą zmiennej c
  4. zmodyfikowanie zawartości katalogu przez usunięcie pliku poleceniem rm
  5. ponowne wywołanie polecenia za pomocą zmiennej c
  6. ponowne wylistowanie zawartości katalogu poleceniem ls


W przypadku basha można to zrealizować w następujący sposób:


Porównanie ostatnich dwóch poleceń z kroku 5 i 6 może prowadzić do wniosku, że realizujemy to samo polecenie (ls)Implementacja przepisana dosłownie w PowerShellu:


W tym przypadku porównanie ostatnich dwóch poleceń z kroku 5 i 6 pokazuje różne wyniki. Przyczyna leży w innym działaniu kroku 2 (przypisanie do zmiennej c polecenia listującego zawartość katalogu (ls)). W przypadku PowerShell wykonywana jest instrukcja ls, a zmiennej przypisywany jest wynik zamiast samego polecenia.

Aby uzyskać działanie analogiczne jak w skryptach basha, należy użyć składni:

 $c='ls'
 &$c


W wyniku zastosowania otrzymujemy pożądany efekt:


Uwaga: w przykładach PowerShell zastosowano wbudowane aliasy w celu uzyskania porównywalności przykładów:

ls -> Get-ChildItem
rm -> Remove-Item

 

  • Odpowiedział
  • @ | 24.06.2014
  • TRENER ALTKOM AKADEMII
Komentarze
W bashu, jeżeli chcemy, aby zmienna przechowywała wynik polecenia robimy tak:
$ c=$(ls)
lub wersja stara, niezalecana:
$ c=`ls`
Skomentował : @ TRENER ALTKOM AKADEMII ,25.06.2014
w takim przypadku zapis $ c=$(ls)
jest równoważny w działaniu z PS> $c=$(ls)
ale nie jest równoważny w wywołaniu:
PS> $c
ale $ echo $c
Skomentował : @ TRENER ALTKOM AKADEMII ,25.06.2014