Różnice między wybraną wersją a wersją aktualną.
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>i znaku o wartości 0</small>). |
- | (z zakresu ASCII), cyfry i 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))%%" > file; ls 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 \\ i **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 roku. Szczegół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ła 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ło 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. |