Narzędzia użytkownika

Narzędzia witryny


so:variables_substitutions

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
so:variables_substitutions [2023/05/15 13:09]
jkonczak
so:variables_substitutions [2025/04/29 21:44] (aktualna)
jkonczak
Linia 1: Linia 1:
-===== Podstawy zmiennych środowiskowych ​=====+====== Zmienne ​=====
  
-==== Czym są ====+==== Zmienne środowiskowe ​====
  
 Zmienne środowiskowe Zmienne środowiskowe
-([[https://​en.wikipedia.org/​wiki/​Environment_variable|Environment ​variables]]) +([[https://​en.wikipedia.org/​wiki/​Environment_variable|environment ​variables]]) 
-to powiązany z procesem ​zbiór par nazwa – wartość. +to zbiór par nazwa – wartość ​powiązany z procesem
-Nazwy zmiennych nie mogą zawierać znaku ''​='' ​i powinny zawierać tylko litery +Nazwy zmiennych nie mogą zawierać znaku ''​=''​ (<​small>​znaku o wartości 0</​small>​).
-(z zakresu ASCII), cyfry podkreślnik, oraz powinny zaczynać się od litery. +
-\\ +
-Częstym stylem jest używanie tylko znaków ''​A-Z'',​ ''​_''​ i ''​0-9''​ w nazwach +
-zmiennych.+
  
 **Każdy proces ma osobny zbiór zmiennych środowiskowych.** **Każdy proces ma osobny zbiór zmiennych środowiskowych.**
Linia 17: Linia 13:
 można wybrać czy kopiuje wszystkie zmienne środowiskowe rodzica, czy kopiuje można wybrać czy kopiuje wszystkie zmienne środowiskowe rodzica, czy kopiuje
 inny podany zbiór zmiennych. inny podany zbiór zmiennych.
-\\ 
-Powłoka dzieli swoje zmienne środowiskowe na te które zostaną przekazane 
-procesom potomnym (//​eksportowane//​) i te, które nie będą przekazane procesom 
-potomnym. 
  
 **Zmienne środowiskowe __nie__ są pomysłem powłoki, tylko systemu operacyjnego.** **Zmienne środowiskowe __nie__ są pomysłem powłoki, tylko systemu operacyjnego.**
  
-==== Ustawianie ​====+==== Zmienne w powłoce ​==== 
 + 
 +Przy starcie, proces powłoki (zgodnej z POSIX) włącza do zbioru zmiennych 
 +swoje zmienne środowiskowe. 
 +\\ 
 +Powłoka dzieli swoje zmienne na te które zostaną przekazane jako zmienne 
 +środowiskowe procesom potomnym (//​eksportowane//​) i te, które nie będą 
 +przekazane procesom potomnym. 
 + 
 +Nazwy zmiennych w powłoce mogą składać się z liter (z zakresu ASCII), cyfr i 
 +podkreślnika,​ ponadto nazwy zmiennych nie mogą zaczynać się od cyfry i nie 
 +zaleca się zaczynać od podkreślnika. 
 +\\ 
 +<​small>​Częstym stylem jest nieużywanie małych liter w nazwach zmiennych.</​small>​ 
 + 
 +=== Ustawianie ​===
  
 Ustawienie wartości zmiennej (i stworzenie jej, jeśli wcześniej nie istniała): Ustawienie wartości zmiennej (i stworzenie jej, jeśli wcześniej nie istniała):
Linia 42: Linia 49:
 Uwaga: zwykle w powłoce pusta zmienna i nieustawiona zmienna zachowują się Uwaga: zwykle w powłoce pusta zmienna i nieustawiona zmienna zachowują się
 identycznie</​small>​ identycznie</​small>​
 +
 +=== Eksportowanie ===
  
 Domyślnie nowo tworzone zmienne nie są przekazywane do procesów potomnych. Domyślnie nowo tworzone zmienne nie są przekazywane do procesów potomnych.
Linia 61: Linia 70:
 zmienną. zmienną.
 Bash pozwala na cofnięcie eksportowania zmiennej przez ''​export -n //​NAZWA//''​. Bash pozwala na cofnięcie eksportowania zmiennej przez ''​export -n //​NAZWA//''​.
 +
 </​small>​ </​small>​
  
-Aby zobaczyć listę wszystkich zmiennych ​środowiskowych, należy wykonać komendę +=== Wypisywanie wszystkich zmiennych powłoki/​środowiskowych === 
-''​**set**''​((''​set''​ służy do wielu rzeczy naraz; z argumentami zmienia ​zachowanie + 
-powłoki.)).+Aby zobaczyć listę wszystkich zmiennych ​powłoki, należy wykonać komendę 
 +''​**set**''​((''​set''​ służy do wielu rzeczy naraz; z argumentami zmienia 
 +zachowanie ​powłoki.)).
 \\ \\
 Aby zobaczyć listę eksportowanych zmiennych środowiskowych,​ należy Aby zobaczyć listę eksportowanych zmiennych środowiskowych,​ należy
Linia 72: Linia 84:
 eksportowanych zmiennych.)). eksportowanych zmiennych.)).
  
-==== (Najprostsze) odczytywanie wartości ​====+=== (Najprostsze) odczytywanie wartości ===
  
 Aby powłoka wstawiła w podane miejsce wartość zmiennej o nazwie ''//​NAZWA//'',​ Aby powłoka wstawiła w podane miejsce wartość zmiennej o nazwie ''//​NAZWA//'',​
Linia 96: Linia 108:
 |''​RANDOM''​|Losowa liczba (generowana na nowo przy każdym odwołaniu się do zmiennej)| |''​RANDOM''​|Losowa liczba (generowana na nowo przy każdym odwołaniu się do zmiennej)|
  
-Więcej w [[https://​www.gnu.org/​software/​bash/​manual/​html_node/​Shell-Variables.html|dokumentacji Basha]] i [[https://​pubs.opengroup.org/​onlinepubs/​009695399/basedefs/xbd_chap08.html|standardzie POSIX]] .+Więcej w [[https://​www.gnu.org/​software/​bash/​manual/​html_node/​Shell-Variables.html|dokumentacji Basha]] i [[https://​pubs.opengroup.org/​onlinepubs/​9799919799/basedefs/V1_chap08.html|standardzie POSIX]] .
  
 ==== Ćwiczenia ==== ==== Ćwiczenia ====
Linia 119: Linia 131:
 komendę ''​lspci''​. komendę ''​lspci''​.
  
-===== Grupowanie poleceń i podstawienia =====+====== Grupowanie poleceń i podstawienia ​======
  
-Działanie powłoki ([[https://​pubs.opengroup.org/​onlinepubs/​009604499/utilities/xcu_chap02.html#tag_02_01|wg. POSIX]], [[https://​www.gnu.org/​software/​bash/​manual/​html_node/​Shell-Operation.html|wg. podręcznika Basha]]): +Działanie powłoki ([[https://​pubs.opengroup.org/​onlinepubs/​9799919799/utilities/V3_chap02.html#tag_19_01|wg. POSIX]], [[https://​www.gnu.org/​software/​bash/​manual/​html_node/​Shell-Operation.html|wg. podręcznika Basha]]): 
-|1. czyta linię| ''​echo ${Y} "$Z 2+3=$%%((2+3))%%" ​> filels baz''​| +|1. czyta linię| ''​echo ${Y} "$Z 2+3=$%%((2+3))%%"; ​ll baz|sort>​$(date +%F)''​||
-|2. rozbija ją na tokeny i rozwiązuje aliasy| ''​echo'',​ ''​${Y}'',​ ''"​$Z 2+3=$%%((2+3))%%"'',​ ''>'',​ ''​file'',​ '';'',​ ''​ls'',​ ''​--color=auto'',​ ''​baz''​| +|2. rozbija ją na tokeny ​\\    **rozwiązuje aliasy**| ''​echo'',​ ''​${Y}'',​ ''"​$Z 2+3=$%%((2+3))%%"​'',​ '';'',​ ''​ll'',​ ''​baz'',​ ''​|'',​ ''​sort'',​ ''>'',​ ''​$(date +%F)''​ \\  ''​echo'',​ ''​${Y}'',​ ''"​$Z 2+3=$%%((2+3))%%"​'',​ '';'',​ ''​ls'',​ ''​-l'',​ ''​baz''​, ''​|'',​ ''​sort'',​ ''>'',​ ''​$(date +%F)''​||
-|3. **dzieli na komendy**|''​echo'',​ ''​${Y}'',​ ''"​$Z 2+3=$%%((2+3))%%"''​ , ''>'',​ ''​file''​| +|3. **dzieli na komendy** |''​echo'',​ ''​${Y}'',​ ''"​$Z 2+3=$%%((2+3))%%"​''​| ''​ls'',​ ''​-l'',​ ''​baz''​|''​sort'',​ ''>'',​ ''​$(date +%F)''​| 
-|4. **wykonuje podstawienia**| ''​echo'',​ ''​a'',​ ''​b'',​ ''​c d 2+3=5''​ , ''>'',​ ''​file''​| +|4. **wykonuje podstawienia**| ''​echo'',​ ''​a'',​ ''​b'',​ ''​c d 2+3=5''​| ''​ls'',​ ''​-l'',​ ''​baz''​|''​sort'',​ ''>'',​ ''​2025-04-27''​| 
-|5. ustawia przekierowania|''​echo'',​ ''​a'',​ ''​b'',​ ''​c d 2+3=5''​| +|5. ustawia przekierowania|''​echo'',​ ''​a'',​ ''​b'',​ ''​c d 2+3=5''​| ''​ls'',​ ''​-l'',​ ''​baz''​|''​sort''​| 
-|6. uruchamia ​komendę| ​|+|6. uruchamia ​komendy|
  
-==== Oddzielanie,​ grupowanie poleceń ====+===== Oddzielanie,​ grupowanie poleceń ​=====
  
 Polecenia można oddzielać przez: Polecenia można oddzielać przez:
   * '';''​ – ''​cmd ; …''​ wykonana ''​cmd''​ i przejdzie dalej   * '';''​ – ''​cmd ; …''​ wykonana ''​cmd''​ i przejdzie dalej
   * ''&''​ – ''​cmd & …''​ uruchomi w tle ''​cmd''​ i przejdzie dalej   * ''&''​ – ''​cmd & …''​ uruchomi w tle ''​cmd''​ i przejdzie dalej
-  * operatory logiczne: +  * operatory logiczne:<​html>​ 
-    ​''&&''​ – ''​a && b''​ wykona ''​a''​ i jeśli ''​a''​ zakończy się powodzeniem,​ uruchomi ''​b''​ \\ ewaluuje do prawdy wtedy i tylko wtedy gdy ''​a''​ i ''​b''​ zakończą się powodzeniem +    ​<​ul>​ 
-    ​* ​''​||''​ – ''​a || b''​ wykona ''​a''​ i jeśli ''​a''​ zakończy się błędem, uruchomi ''​b''​ \\ ewaluuje do fałszu wtedy i tylko wtedy gdy ''​a''​ i ''​b''​ zakończą się błędem+      <li class="​level2"><​div class="​li"></​html> ​''&&''​ – ''​a && b''​ wykona ''​a''​ i jeśli ''​a''​ zakończy się powodzeniem,​ uruchomi ''​b''​ \\ ewaluuje do prawdy wtedy i tylko wtedy gdy ''​a''​ i ''​b''​ zakończą się powodzeniem<​html></​div></​li>​ 
 +      <​li class="​level2"><​div class="​li"></​html> ​''​||''​ – ''​a || b''​ wykona ''​a''​ i jeśli ''​a''​ zakończy się błędem, uruchomi ''​b''​ \\ ewaluuje do fałszu wtedy i tylko wtedy gdy ''​a''​ i ''​b''​ zakończą się błędem<​html></​div></​li>​ 
 +    </​ul>​ 
 +    </​html><​small>​Program kończy się powodzeniem jeśli wywoła ''​exit(0);''​ lub wykona ''​return 0;''​ w funkcji ''​main'';​ inaczej kończy się błędem. </​small>​
  
 Polecenia można grupować przez: Polecenia można grupować przez:
   * ''​{ … }''​ – grupuje polecenia w tej powłoce, \\ //Uwaga//: polecenia wewnątrz ''​{ … }''​ muszą być zakończone przez '';''​ lub ''&''​ \\ //Uwaga//: między nawiasami wąsatymi i poleceniem muszą być spacje   * ''​{ … }''​ – grupuje polecenia w tej powłoce, \\ //Uwaga//: polecenia wewnątrz ''​{ … }''​ muszą być zakończone przez '';''​ lub ''&''​ \\ //Uwaga//: między nawiasami wąsatymi i poleceniem muszą być spacje
   * ''​(…)''​ – uruchamia polecenia w osobnej powłoce ("​podpowłoce"​).   * ''​(…)''​ – uruchamia polecenia w osobnej powłoce ("​podpowłoce"​).
 +<​html><​div style="​margin-top:​-1.4em"></​div></​html>​
 +<​small>​Wynik grupy poleceń to wynik ostatniego z poleceń w grupie – ''​{ true; false; }''​ zwraca niepowodzenie. \\ Uruchomienie polecenia w tle kończy się powodzeniem jeśli udało się uruchomić polecenie w tle – ''​{ false& }''​ zwraca sukces. </​small>​
 +  ​
 Przykłady: Przykłady:
   * ''​{ cd /tmp; pwd; }; pwd''​ – wejdzie do ''/​tmp''​ i wypisze dwa razy katalog roboczy ''/​tmp''​   * ''​{ cd /tmp; pwd; }; pwd''​ – wejdzie do ''/​tmp''​ i wypisze dwa razy katalog roboczy ''/​tmp''​
Linia 163: Linia 181:
 ''​fortune''​. ''​fortune''​.
  
-==== Podstawienia ====+===== Podstawienia ​=====
  
 Podstawienia (//shell expansion// / //word expansion//​) polegają na zastąpieniu tekstu Podstawienia (//shell expansion// / //word expansion//​) polegają na zastąpieniu tekstu
 (pasującego do konkretnego wzorca) przez określoną wartość (pasującego do konkretnego wzorca) przez określoną wartość
-([[https://​pubs.opengroup.org/​onlinepubs/​009604499/utilities/xcu_chap02.html#tag_02_06|wg. POSIX]],+([[https://​pubs.opengroup.org/​onlinepubs/​9799919799/utilities/V3_chap02.html#tag_19_06|wg. POSIX]],
 [[https://​www.gnu.org/​software/​bash/​manual/​html_node/​Shell-Expansions.html|wg. podręcznika Basha]]). [[https://​www.gnu.org/​software/​bash/​manual/​html_node/​Shell-Expansions.html|wg. podręcznika Basha]]).
  
-Dostępne podstawienia (w kolejności wykonywania przez BASH):+Dostępne podstawienia (w kolejności wykonywania przez Bash):
   * ''​{…}''​ – zakres lub lista (<​small>​Uwaga:​ POSIX nie definiuje tego podstawienia,​ jest ono dostępne w Bashu i niektórych innych powłokach</​small>​)   * ''​{…}''​ – zakres lub lista (<​small>​Uwaga:​ POSIX nie definiuje tego podstawienia,​ jest ono dostępne w Bashu i niektórych innych powłokach</​small>​)
   * ''​~''​ i ''​~//​username//''​ – katalog domowy   * ''​~''​ i ''​~//​username//''​ – katalog domowy
Linia 182: Linia 200:
 \\ \\
 Wewnątrz pojedynczych cudzysłowów nie są wykonywane żadne podstawienia. Wewnątrz pojedynczych cudzysłowów nie są wykonywane żadne podstawienia.
 +
 +<​small>​
 +Wewnątrz pojedynczych cudzysłowów poprzedzonych znakiem dolara – ''​%%$'​…'​%%''​ –
 +nie są wykonywane podstawienia,​ natomiast sekwencje znaków poprzedzanych przez
 +odwrócony ukośnik takie jak np. ''​\n''​ są zastępowane odpowiadającymi im znakami.
 \\ \\
-<​small>​W Bashu funkcjonują też cudzysłowy ''​$'​…%%'​%%''​ które pozwalają na +Takie zachowanie (dostępne od dawna w niektórych powłokach) zostało włączone do 
-wprowadzanie sekwencji poprzedzanych przez odwrócony ukośnik takich jak np. +standardu POSIX od 2024 rokuSzczegóły w [[https://​www.gnu.org/​software/​bash/​manual/​html_node/​ANSI_002dC-Quoting.html|dokumentacji ​Basha]] 
-''​\n'';​ patrz +i najnowszym [[https://​pubs.opengroup.org/​onlinepubs/​9799919799/​utilities/​V3_chap02.html#​tag_19_02_04|standardzie POSIX]].
-[[https://​www.gnu.org/​software/​bash/​manual/​html_node/​ANSI_002dC-Quoting.html|dokumentacja ​Basha]].+
 </​small>​ </​small>​
  
Linia 194: Linia 216:
 ''​słowa'',​ a ''​ls "​$(echo dwa słowa)"''​ spróbuje wypisać katalog ''​dwa słowa''​ ''​słowa'',​ a ''​ls "​$(echo dwa słowa)"''​ spróbuje wypisać katalog ''​dwa słowa''​
  
-=== Zakres / lista – nawiasy wąsate ===+==== Zakres / lista – nawiasy wąsate ​(rozszerzenie Basha) ====
  
 +| | <​small>​przykładowe wyrażenie \\ z nawiasami wąsatymi </​small>​ | <​small>​na co zostanie zastąpione</​small>​ |
 |liczby (lub litery) z podanego zakresu \\ <​small>​format:​ ''​{początek..koniec..krok}''</​small>​|**''​{1..5}''​**|''​1 2 3 4 5''​| |liczby (lub litery) z podanego zakresu \\ <​small>​format:​ ''​{początek..koniec..krok}''</​small>​|**''​{1..5}''​**|''​1 2 3 4 5''​|
 |:::​|''​file{15..20}.txt''​|''​file15.txt file16.txt file17.txt file18.txt''​| |:::​|''​file{15..20}.txt''​|''​file15.txt file16.txt file17.txt file18.txt''​|
 |:::​|<​small>''​{0..9..3}''</​small>​|<​small>''​0 3 6 9''</​small>​| |:::​|<​small>''​{0..9..3}''</​small>​|<​small>''​0 3 6 9''</​small>​|
-|:::​|<​small>''​{a..z..2}''</​small>​|<​small>''​a f k p u z''</​small>​|+|:::​|<​small>''​{a..z..5}''</​small>​|<​small>''​a f k p u z''</​small>​|
 |wymienione po przecinkach elementy \\ <​small>​format:​ ''​{element1,​element2,​…}''</​small>​|**''​{a,​b,​d,​f}''​**|''​a b d f''​| |wymienione po przecinkach elementy \\ <​small>​format:​ ''​{element1,​element2,​…}''</​small>​|**''​{a,​b,​d,​f}''​**|''​a b d f''​|
 |:::​|**''/​tmp/​{ala,​ma,​kota}.txt''​**|''/​tmp/​ala.txt /tmp/ma.txt /​tmp/​kota.txt''​| |:::​|**''/​tmp/​{ala,​ma,​kota}.txt''​**|''/​tmp/​ala.txt /tmp/ma.txt /​tmp/​kota.txt''​|
Linia 212: Linia 235:
 listy plików). listy plików).
  
-=== Katalogi domowe ===+==== Katalogi domowe ​====
  
 |katalog domowy bieżącego użytkownika |**''​~''​**|''///​home/​username//''​ | |katalog domowy bieżącego użytkownika |**''​~''​**|''///​home/​username//''​ |
 |<​small>​katalog domowy użytkownika username</​small>​|<​small>''​~username''</​small>​|<​small>''/​home/​username''</​small>​| |<​small>​katalog domowy użytkownika username</​small>​|<​small>''​~username''</​small>​|<​small>''/​home/​username''</​small>​|
 +
 +Podstawienia ''​~''​ i ''​~//​user//''​ są wykonywane tylko na początku czegoś co
 +może być ścieżką zdaniem powłoki (i nie są wykonywane wewnątrz cudzysłowów).
 +<​small>​ Szczegóły w [[https://​pubs.opengroup.org/​onlinepubs/​9799919799/​utilities/​V3_chap02.html#​tag_19_06_01|standardzie POSIX]]
 +i [[https://​www.gnu.org/​software/​bash/​manual/​html_node/​Tilde-Expansion.html|dokumentacji Basha]].</​small>​
  
 ~~Zadanie.#​~~ ~~Zadanie.#​~~
Linia 225: Linia 253:
 </​small>​ </​small>​
  
-=== Zmienne / parametry ===+==== Zmienne / parametry ​====
  
 Poza podstawianiem wartości zmiennej przez **''​$ZMIENNA''​** można też użyć składni Poza podstawianiem wartości zmiennej przez **''​$ZMIENNA''​** można też użyć składni
-**''​${ZMIENNA}''​**. Pozwala to np., na napisanie ''​${SIZE}<​nowiki>​MB</​nowiki>''​.+**''​${ZMIENNA}''​**. 
 +\\ 
 +Pozwala to np., na napisanie ''​${SIZE}<​nowiki>​MB</​nowiki>''​.
  
 Wyrażenie ''​${#​ZMIENNA}''​ podstawia długość (ilość znaków) zmiennej. \\ Wyrażenie ''​${#​ZMIENNA}''​ podstawia długość (ilość znaków) zmiennej. \\
Linia 271: Linia 301:
 pliku wskazanego przez ''​S''​. pliku wskazanego przez ''​S''​.
 \\ \\
-Następnie wypisz wartość ''​D''​ oraz ''​S''​.+Następnie wypisz wartość ''​D''​ oraz ''​F''​.
  
 ~~Zadanie.#​~~ Przygotuj komendę która zmienia nazwę pliku wskazanego przez ~~Zadanie.#​~~ Przygotuj komendę która zmienia nazwę pliku wskazanego przez
 zmienną ''​F''​ tak, by nazwa nie zawierała spacji. zmienną ''​F''​ tak, by nazwa nie zawierała spacji.
  
-=== Podstawianie wyników poleceń ===+==== Podstawianie wyników poleceń ​====
  
 Wyrażenia ''​**$(**//​cmd//​**)**''​ oraz ''​`//​cmd//​`''​ zostaną zastąpione wynikiem polecenia ''//​cmd//''​. Wyrażenia ''​**$(**//​cmd//​**)**''​ oraz ''​`//​cmd//​`''​ zostaną zastąpione wynikiem polecenia ''//​cmd//''​.
Linia 282: Linia 312:
 Trzeba pamiętać że w linii ''//​cmd//​ … $(//sub//) …''​ najpierw zostanie w całości Trzeba pamiętać że w linii ''//​cmd//​ … $(//sub//) …''​ najpierw zostanie w całości
 wykonane polecenie ''//​sub//'',​ a potem jego wynik będzie podstawiony w miejsce wykonane polecenie ''//​sub//'',​ a potem jego wynik będzie podstawiony w miejsce
-''​$(//​sub//​)''​.+''​$(//​sub//​)''​ i dopiero po tej operacj zostanie wykonana komenda ''//​cmd//​ …''​.
  
 Zaleca się używać składni ''​$(//​cmd//​)'',​ składnia ''​`//​cmd//​`''​ jest wspierana Zaleca się używać składni ''​$(//​cmd//​)'',​ składnia ''​`//​cmd//​`''​ jest wspierana
Linia 309: Linia 339:
 </​small>​ </​small>​
  
-===== Arytmetyka ​======+==== Arytmetyka =====
  
 Powłoka wspiera obliczenia (przynajmniej) całkowitoliczbowe. \\ Powłoka wspiera obliczenia (przynajmniej) całkowitoliczbowe. \\
 Standard POSIX definiuje tylko składnię ''​**$%%((%%**…**))**''​. \\ Standard POSIX definiuje tylko składnię ''​**$%%((%%**…**))**''​. \\
-Bash dodatkowo posiada polecenie ''​let …''​ wykonujące podane działania.+Bash dodatkowo posiada ​składnię ''​%%((…))%%''​ oraz polecenie ''​let …''​ wykonujące 
 +podane działania.
  
-Wewnątrz ''​%%$((…))%%''​ / ''​let …''​ można:+Wewnątrz ''​%%$((…))%%''​ / ''​%%((…))%%''​ / ''​let …''​ można:
   * pomijać ''​$''​ przed nazwami zmiennych, np. ''​%%x=$((x+2))%%''​   * pomijać ''​$''​ przed nazwami zmiennych, np. ''​%%x=$((x+2))%%''​
   * używać operatora przypisania,​ np. ''​%%echo $((y=2**5, z=10^6))%%''​ przypisze do ''​y''​ wartość ''​2<​sup>​5</​sup>​ = 32'',​ przypisze do z wartość ''​10 xor 6 = 12'',​ wyliczy ''​32,​ 12 = 12''​ (operator przecinka z C) i wykona ''​echo 12''​   * używać operatora przypisania,​ np. ''​%%echo $((y=2**5, z=10^6))%%''​ przypisze do ''​y''​ wartość ''​2<​sup>​5</​sup>​ = 32'',​ przypisze do z wartość ''​10 xor 6 = 12'',​ wyliczy ''​32,​ 12 = 12''​ (operator przecinka z C) i wykona ''​echo 12''​
-  * zawartość ''​%%$((…))%%''​ jest traktowana jakby byłw podwójnych cudzysłowach,​\\ zawartość ''​let …''​ liczy każdy z argumentów z osobna, \\ np: ''​X=$%%((%% ( 2 + 2 ) * 2 ))'',​ ''​let "X = ( 2 + 2 ) * 3"'',​ ''​let X=(2+2)*3''​ i ''​let X=(2+2)*3 Y=2*X+1''​ są poprawne, ale <​del>''​let X = ( 2 + 2 ) * 3''</​del>​ już nie+  * zawartość ''​%%$((…))%%''​ i ''​%%((…))%%''​ jest traktowana ​jaki jedno wyrażenie (z parsowaniem takim jakby byłw podwójnych cudzysłowach)natomiast ​zawartość ''​let …''​ liczy każdy z argumentów z osobna, \\ np: ''​X=$%%((%% ( 2 + 2 ) * 2 ))'',​ ''​let "X = ( 2 + 2 ) * 3"'',​ ''​let X=(2+2)*3''​ i ''​let X=(2+2)*3 Y=2*X+1''​ są poprawne, ale <​del>''​let X = ( 2 + 2 ) * 3''</​del>​ już nie
   * wewnątrz ''​let …''​ trzeba escape'​ować znaki specjalne, np. ''​let X=0xff\&​1066''​ / ''​let "X = 0xff & 1066"''​   * wewnątrz ''​let …''​ trzeba escape'​ować znaki specjalne, np. ''​let X=0xff\&​1066''​ / ''​let "X = 0xff & 1066"''​
  
-POSIX [[https://​pubs.opengroup.org/​onlinepubs/​9699919799/​utilities/​expr.html|standaryzuje]] też program ''​expr''​ który wykonuje podane obliczenie i wypisuje jego wynik na standardowe wejście.+POSIX [[https://​pubs.opengroup.org/​onlinepubs/​9799919799/​utilities/​expr.html|standaryzuje]] też program ''​expr''​ który wykonuje podane obliczenie i wypisuje jego wynik na standardowe wejście.
  
 <​small>​ <​small>​
Linia 341: Linia 372:
 \\       • wypisze różnicę między ''​END''​ a ''​START''​ \\       • wypisze różnicę między ''​END''​ a ''​START''​
  
-===== Aliasy ​======+==== Aliasy =====
  
-Alias ([[https://​pubs.opengroup.org/​onlinepubs/​9699919799/​utilities/​alias.html|POSIX]],​ [[https://​www.gnu.org/​software/​bash/​manual/​html_node/​Aliases.html|Bash]]) to+Alias ([[https://​pubs.opengroup.org/​onlinepubs/​9799919799/​utilities/​alias.html|POSIX]],​ [[https://​www.gnu.org/​software/​bash/​manual/​html_node/​Aliases.html|Bash]]) to
 słowo, które jeśli wystąpi w miejscu komendy, to zostanie zastąpione wcześniej słowo, które jeśli wystąpi w miejscu komendy, to zostanie zastąpione wcześniej
 ustalonym tekstem. ustalonym tekstem.
so/variables_substitutions.1684148976.txt.gz · ostatnio zmienione: 2023/05/15 13:09 przez jkonczak