Milyen gyakorlati különbségek vannak Bash és Zsh között?

Azzal a hírrel, hogy a Catalina alapértelmezés szerint Zash helyett Bash , I “m sok eredmény megtalálása elmondja nekem a kapcsolót, és hogy ez problémákat okozhat a shell parancsfájlokkal, de még nem ismerem a Zsh-t ahhoz, hogy tudjam, mik lehetnek ezek a problémák.

A shell szkriptjeim valóban nem ez bonyolult, de a Bash-ot csak macOS-on és Linuxon használtam – nulla tapasztalat a Zsh-vel. Tudna-e valaki egyszerű gyakorlati összehasonlítást vagy konkrét botlásokat megismerni, hogy készen állhassak a új héj, amikor a Catalina megjelenik?

Megjegyzések

  • Ez az összes hubbub, amelyet olvastál, sokat tehet a semmiről. Az operációs rendszer egy ” alapértelmezett ” shell új felhasználók létrehozásakor, nincs több ok. Bash nem ‘ megy és használhatja ezt héjként vagy bármely más héjként c Jelenleg felajánlott.
  • Olyanként beszélni, aki ‘ mindkettőt használta, és a bash-ra szállt – az egyetlen dolog, ami igazán, mélységesen elégedetlen volt a zsh-vel, az a döntése volt megszakítani a POSIX-megfelelőséget, amikor a szabvány kanonizálja az elismerten rossz tervezési döntéseket olyan módon, amely megkönnyítette a helytelenséget a helyességben, amikor olyan szkripteket próbált megírni, amelyeknek kompatibilisnek kellett lenniük más, szigorúan POSIX-szuperkészletű héjakkal. Sajnos ez a ” egyetlen dolog ” elég nagy lehet. Ennek ellenére a ksh93 nem megy el ‘ és bárki, aki komolyan gondolja a bash-t, nem használja az ősi 3.x kiadású Apple hajókat.
  • Követésként – tegnap telepítette a Catalinát, átállt a zsh-re, importálta a bash_history-t és átmásolta a bash_profile által preferált álneveimet, úgy tűnik, semmi sem tört meg. Becsülje meg az itt mindenki által nyújtott összes információt, és remélhetőleg ez másoknak is segítséget nyújt.
  • @CharlesDuffy: Jó megjegyzés. A WRT ” komoly “, és a bash version 3.2.57(1) használatával: Tudja, hogy az Apple használja-e a bash bármi ” fontos ” a rendszeren?

Válasz

Először néhány fontos dolog:

  1. Bash nem fog eltűnni . Ha már használja a bash-t, akkor semmi nem változik az Ön számára. Csak annyi változik, hogy a zsh lesz az alapértelmezett bejelentkezési héj az új fiókokhoz, és akkor is kiválaszthatja a bash-t.
  2. A szkripteket ez nem érinti . Mi változik az interaktív használatra szolgáló héj, vagyis a héj a terminálokban (és néhány egyéb dolog, amely a bejelentkezési héjat használja, például crontabs). Ha van egy szkript egy végrehajtási engedélyekkel rendelkező fájlban, akkor kezdje egy shebang sorral , például #!/bin/bash vagy #!/bin/sh vagy #!/usr/bin/env bash, pontosan úgy fog működni, mint korábban.
  3. A Zsh szintaxisa nem teljesen kompatibilis a bash-val , de bezár. Sok kód tovább fog működni, például tipikus álnevek és funkciók. A fő különbségek az interaktív konfigurációs funkciókban vannak.

Most, feltételezve, hogy fontolóra veszi a váltást A zsh fájlba, amely évek óta lehetséges, íme a fő különbségek, amelyekkel találkozni fog. Ez nem egy teljes felsorolás!

Az interaktív használat főbb különbségei

Konfigurációs fájlok : bash olvas (főleg) .bashrc nem bejelentkezési interaktív héjakban (de a macOS alapértelmezés szerint a terminálokban indít bejelentkezési héjat), .profile vagy a bejelentkezési héjakban, és .inputrc. A Zsh olvas (főleg) .zshrc (minden interaktív héjban) és .zprofile (bejelentkezési héjakban). Ez azt jelenti, hogy egyetlen bash testreszabásod sem lesz érvényes: ezeket át kell adnod. Nem lehet csak átmásolni a fájlokat, mert sok mindenre szükség lesz csípésre.

A kulcskötések teljesen más szintaxist használnak. Bash a .inputrc és a bind beépített segítségével köti össze a kulcsokat a readline parancsok . A Zsh a bindkey beépített segítségével köti össze a kulcsokat a zle widgetekkel . A legtöbb readline parancsnak van zsh megfelelője, de ez nem mindig tökéletes ekvivalencia.

A kulcskötésekről szólva, ha a Vi (m) -t használod terminálon belüli szerkesztőként, de nem parancssori módként a shellben, akkor észreveszed, hogy a zsh alapértelmezés szerint vi szerkesztési módot használ, ha EDITOR vagy VISUAL értéke vi vagy vim A bindkey -e emacs módra vált.

Kérjen : a bash a kérdést (főleg) a következőből állítja be: PS1 , amely a következőt tartalmazza: visszavágó menekülés . A Zsh a kérdést főleg PS1 értékről állítja be, amely a következőt tartalmazza: százalék menekül . A bash” s PROMPT_COMMAND funkciói itt érhetők el: zsh a precmd és kampós funkciók . A Zsh több kényelmi mechanizmussal rendelkezik a divatos felszólítások létrehozásához, beleértve a gyors téma mechanizmust .

Az alap parancssori előzmények mechanizmusok (navigálás a felfelé / lefelé , a Ctrl + billentyűkombinációval R , a történelem bővítése !! és barátaival, az utolsó argumentum felidézése a Alt + gombbal. vagy $_) ugyanúgy működnek, de a részletekben nagyon sok különbség van, túl sok ahhoz, hogy ide soroljam. Másolhatja a .bash_history fájlt a .zsh_history fájlba, ha nem módosított egy fájlformátumot megváltoztató shell opciót.

Befejezés : Mindkét shell alapértelmezetten egy alap befejezési mód, amely többnyire kiegészíti a parancsok és fájlok nevét, és átkapcsol egy képzeletbeli módra beleértve a bash_completion -t a bash-on, vagy a compinit futtatásával a zsh-ben. Megtalál néhány olyan parancsot, amelyet a bash jobban kezel, és olyanokat, amelyeket a zsh jobban kezel. A Zsh általában pontosabb, de néha feladja, ahol a bash olyasmit tesz, ami nem helyes, de ésszerű. A parancs lehetséges kiegészítésének megadásához a zsh-nek három mechanizmusa van:

Sok bash “s shopt beállítás megfelelő setopt a zsh fájlban.

Zsh doe sn “t # kezelése alapértelmezés szerint a parancssorban kezdődő megjegyzésként, csak szkriptekként (beleértve a .zshrc és így tovább). Az interaktív megjegyzések engedélyezéséhez futtassa a setopt interactive_comments futtatást.

A szkriptek főbb különbségei

(és természetesen az energiafelhasználók számára a parancssorban)

A bash-ban a $foo a foo, szétválasztja a szóköz karaktereknél, és ha a szóközökkel elválasztott részek helyettesítő karaktereket tartalmaznak, és egy meglévő fájlhoz illeszkednek, akkor a mintát a találatok listájával helyettesíti. Ahhoz, hogy egyszerűen megkapja a foo értékét, szüksége van a "$foo" fájlra. Ugyanez vonatkozik a $(foo) parancsok helyettesítésére. A zsh-ben a $foo a foo és $(foo) értéke a foo mínusz a végső új sorokkal, két kivétellel. Ha egy szó üres lesz az üres, nem idézett változók kibővítése miatt, akkor eltávolításra kerül (pl. a=; b=; printf "%s\n" one "$a$b" three $a$b five one, egy üres sort, three, five). A nem idézett parancs-helyettesítés eredménye fel van osztva a szóközzel, de a darabok nem kerülnek helyettesítő karakterekre.

A ash tömbök 0-tól (hossz-1) vannak indexelve. A Zsh tömböket 1-től hosszúságig indexelik. a=(one two three) esetén a bash-ban a ${a[1]} two, de zsh-ben “s” one. Ha a bash-ban csak egy zárójel nélküli tömb változóra hivatkozunk, akkor megkapjuk az első elemet, pl. $a one és a $a[1] one[1].Az zsh fájlban a $a kibővül a nem üres elemek listájára, a $a[1] pedig az első elemre. Hasonlóképpen, a bash-ban egy tömb hossza ${#a}; ez zsh-ben is működik, de egyszerűbben $#a néven írhatja. A 0 indexelést alapértelmezetté teheti a setopt ksh_arrays paranccsal; ez bekapcsolja azt a követelményt is, hogy zárójeleket használjon egy tömb elemre történő hivatkozásra.

A Bash-nek extra helyettesítő karakterminták , például @(foo|bar), hogy megfeleljenek a foo vagy bar, amelyek csak shopt -s extglob esetén engedélyezettek. A zsh-ben engedélyezheti ezeket a mintákat a setopt ksh_glob paranccsal, de van egy egyszerűbb típus is div id = “d9ca365ab8”>

natív szintaxis , például(foo|bar), amelyek némelyikéhezsetopt extended_globszükséges (do tegye ezt a.zshrcfájlba, és alapértelmezés szerint be van kapcsolva a befejezési függvényekben). A rekurzív könyvtár bejárása**/mindig engedélyezve van a zsh-ben.

A bash-ban alapértelmezés szerint, ha a helyettesítőminta nem felel meg egyetlen fájlnak sem, akkor balra marad változatlan. A zsh fájlban alapértelmezés szerint “hibaüzenetet kap, amely általában a legbiztonságosabb beállítás. Ha helyettesítő karaktert szeretne átadni egy parancsnak, használjon idézőjeleket. A bash viselkedésre a setopt no_nomatch . A setopt null_glob .

A bash-ban a csővezeték jobb oldala alhéjban fut. Az zsh-ben a szülőhéjban fut, tehát írhat ilyeneket: somecommand | read output.

Néhány szép zsh funkció

Íme néhány olyan jó zsh funkció, amelyek a bash-nak nincsenek ( legalábbis komoly könyökzsír nélkül). Még egyszer: ez csak egy válogatás azok közül, amelyeket a leghasznosabbnak tartok.

Glob selejtezők lehetővé teszi a fájlok egyeztetését olyan metaadatok alapján, mint az időbélyeg, a méret stb. Ezek lehetővé teszik a kimenet módosítását is. A szintaxis meglehetősen rejtélyes, de rendkívül kényelmes. Íme néhány példa:

  • foo*(.): csak a foo* és szimbolikus hivatkozások szokásos fájlokra, nem könyvtárakra és egyéb speciális fájlokra.
  • foo*(*.): csak a (z) foo*.
  • foo*(-.): csak a foo* -nek megfelelő rendes fájlok, nem a szimbolikus linkek és egyéb speciális fájlok.
  • foo*(-@): csak a foo* -nek megfelelő, lógó szimbolikus linkek.
  • foo*(om): a (z) foo* fájlnak megfelelő fájlok, a legutóbbi módosítás dátuma szerint rendezve, először a legutóbbi. Vegye figyelembe, hogy ha ezt átadja a ls, akkor saját rendezését végzi. Ez különösen hasznos…
  • foo*(om[1,10]): a 10 legfrissebb fájl, amely megfelel a foo* fájlnak, a legfrissebb először.
  • foo*(Lm+1): a foo* fájlnak megfelelő fájlok, amelyek mérete legalább 1 MB.
  • foo*(N): ugyanaz, mint a foo*, de ha ez nem felel meg egyetlen fájlnak sem, akkor készítsen üres listát a null_glob opció beállításának (lásd fent).
  • *(D): illesszen be minden fájlt, beleértve a pontfájlokat is ( kivéve . és ..).
  • foo/bar/*(:t) (egy előzmények módosítója ): a foo/bar fájlok, de csak a fájl alapnevével. Pl. ha van a foo/bar/qux.txt, akkor qux.txt néven bővül.
  • foo/bar/*(.:r): vegyen rendszeres fájlokat a foo/bar alá, és távolítsa el a kiterjesztést. Például. A foo/bar/qux.txt kiterjesztése foo/bar/qux.
  • foo*.odt(e\""REPLY=$REPLY:r.pdf"\"): A (z) foo*.odt fájlnak megfelelő fájlok listája, és cserélje le a .odt szöveget .pdf kifejezésre (függetlenül attól, hogy a PDF fájl létezik).

Íme néhány hasznos zsh-specifikus helyettesítő karakterminta .

  • foo*.txt~foobar*: mind .txt fájlok, amelyek neve foo betűvel kezdődik, de nem foobar.
  • image<->.jpg(n): minden .jpg fájl, amelynek alapneve image, amelyet egy szám követ, pl.image3.jpg és image22.jpg, de nem image-backup.jpg. A globális minősítő (n) miatt a fájlok numerikus sorrendbe kerülnek, vagyis a image9.jpg a image10.jpg (ezt nélkül is megteheti alapértelmezettként a setopt numeric_glob_sort ).

A fájlok tömeges átnevezéséhez a zsh nagyon kényelmes eszköz: a zmv függvény . Javasolt a következőhöz: .zshrc:

autoload zmv alias zcp="zmv -C" zln="zmv -L" 

Példa:

zmv "(*).jpeg" "$1.jpg" zmv "(*)-backup.(*)" "backups/$1.$2" 

A Bash-nek van néhány módja a transzformációk alkalmazására egy változó értékének felvételekor . A Zsh-nek van ugyanaz és még sok más .

A Zsh számos kevés kényelmi funkcióval rendelkezik a könyvtárak megváltoztatásához . Kapcsolja be a setopt auto_cd parancsot, hogy könyvtárra váltson, amikor annak nevét írja be anélkül, hogy be kellene írnia a cd (manapság a bashnak is van ilyen). Használhatja a két argumentumú űrlapot cd használatával olyan könyvtárra váltáshoz, amelynek neve közel áll az aktuális könyvtárhoz . Például, ha “div div = = 31d8817296”> be van kapcsolva, és a /some/where/foo-new/deeply/nested/inside helyre szeretne lépni, írja be a következőt: cd old new.

Egy változó értékének hozzárendeléséhez természetesen a következőt írja: VARIABLE=VALUE. A szerkesztéshez a változó értéke interaktív módon, futtassa csak a vared VARIABLE futtatást.

Végső tanács

A Zsh egy konfigurációs felülettel rendelkezik, amely támogatja a néhány leggyakoribb beállítást, beleértve a konzerves recepteket olyan dolgokhoz, mint a kis- és nagybetűk nélküli befejezés. (az első sorra nincs szükség, ha olyan konfigurációs fájlt használ, amelyet a zsh-newuser-install szerkesztett):

autoload -U zsh-newuser-install zsh-newuser-install 

Kiszerelésben, konfigurációs fájl nélkül, sok zsh hasznos funkció le van tiltva az 1990-es verziókkal való visszafelé való kompatibilitás érdekében. A zsh-newuser-install javasol néhány ajánlott funkciót a bekapcsoláshoz.

Számos zsh konfigurációs keret található az interneten (sok közülük a Githubon ). Kényelmes módja lehet az indulásnak néhány hatékony funkcióval. Az érme másik oldala az, hogy gyakran bezárnak a dolgokba, ahogy a szerző teszi, ezért néha megakadályozzák, hogy a dolgokat úgy csináld, ahogyan szeretnéd. Használd saját felelősségedre.

A zsh kézikönyv sok információt tartalmaz, de gyakran oly módon írják, hogy szűk és nehezen követhető legyen, és kevés példája van. Ne habozzon, keressen magyarázatot és példát az interneten: ha csak a zsh, amit a kézikönyvben könnyű megérteni, akkor hiányozni fog. Két jó erőforrás: a zsh-felhasználók levelezőlistája és Unix Stack Exchange . átfogó cikkgyűjtemény a zsh-re való áttérésről a mac-on megtalálható a scriptingosx.com oldalon, és hasznos Ruby szkript a parancsok előzményeinek magával hozásához megtalálható a Github oldalon.

Megjegyzések

  • Most ‘ kíváncsi vagyok, vajon a csodálatos ctrl-o működik-e a zsh-n. Természetesen ‘ nem működik Mac OS rendszeren sem a bash-on, tehát ‘ nem igazán releváns sem a válasz, sem a webhely szempontjából. Nem tudtam ‘ megtalálni semmilyen információt a ctrl-o-ról a zsh-ben egy gyors online keresés során, de megint a bash-ban lévő ctrl-o-ra vonatkozó információk szintén általánosan pontatlanok …
  • @Jasper nem tudtam ‘, hogy bash-nak van ilyen. A leírás szerint Co ugyanezt csinálja zsh-ben az alapértelmezett kulcs-összerendelésekkel.
  • Örömmel tapasztaltam, hogy belefoglalta a ” néhány szép zsh-funkciót ” részt, és aggódva olvassa el, hogy megpróbálja megérteni, miért dönthetett az Apple, miért vált át a rendkívül elterjedt Bash-ról a sokkal kevésbé népszerű Zsh-re. Nem találtam ‘ semmit, még távolról is kényszerítőt a váltás igazolására. ‘ nyilvánvalóan nem teljes körű lista, de azért hagytad ki a Zsh fő jellemzőit, mert azok ‘ nyilvánvalóak? Mit hiányolok itt?
  • @CodyGray nem tudom ‘ nem tudom, és az Apple nem szokott ‘ lenni hogy igazolják magukat. Valami köze lehetett ahhoz, hogy ha a helyzet megfordult volna, akkor nem lett volna „div bash features” rész „’.Vagy annak lehet az oka, hogy az utolsó nem GPLv3 bash nagyon megöregszik , míg a zsh-nek liberálisabb licence van.
  • Megértésem szerint ez volt lényegében az engedélyezés volt az egyetlen ok. ‘ az is, hogy a basOS a macOS-on továbbra is v3. Az utcán az a hír, hogy a bash nem fog frissülni ‘ és várhatóan eltávolításra kerül, hacsak a végfelhasználó nem telepíti brew-on keresztül, stb. A zsh előbb-utóbb MacOS esetén, de egyelőre ragaszkodik a Debianhoz.

Válasz

Változás a shelled most és tesztelj – nem kell várni.

chsh -s /bin/zsh 

Ezenkívül azt is becsülném, hogy a macOS-felhasználók 95% -a nem használ parancssort, és azoké, akik ezt használják, további 95% -nak nem kell semmit megváltoztatnia, vagy összes. (Inkább azt fogadnám, hogy a héjak létét ismerő 1% -nak 10% -ának mást kell tennie, mint pár sort beillesztenie .dot fájljaiba)

A felszólítás megváltozik, és ha megváltoztatta a felszólítást a bash napon, akkor a zsh fájl megváltoztatásának módja nem nehezebb és nem kevésbé dokumentált, bash.

Az újabb héjak soha nem tudnak leszállni a földről, ha nagyobb tárgyakat törnének meg, vagy fájdalmas alkalmazkodási időszakot okoznának. Ha egy alapvető változásra vágysz, és valóban héjra vágysz, akkor gondolkodnod kell rajta, és képzettségre, valamint örökbefogadásra van szükséged – próbálj halat .

Megjegyzések

  • Összeütközök a fish vel. Két éve használom, de egyes másolatok / beillesztett egysorok összeférhetetlensége fárasztó. Másrészt nagyon hasznos shell (az automatikus javaslatok < kbd > Tab < / kbd > kiválóak)
  • szerettem volna szeretni a halakat, továbbra is a halakat szeretem, de túl sok héjszerkezetem van egy évtizedből ksh -ban, hogy valaha valóban elhagyja ezt a hajtást. Örömmel hagyom hátra a bash-t, és személyesen átfogom a zsh-t.
  • Alaposan elárasztottak a halak. Ez valójában csak egy újabb Unix-szerű héj, egy kicsit kevesebb Cruft-tal. (Szó szerint azt mondja, hogy ” Végül egy parancssori héj a 90-es évek ” számára a kezdőlapon.) Az egyetlen új héj, amely Az elmúlt években láttam, hogy valójában valami újat hozott a (mainstream) táblázatba, a PowerShell volt, amely sajnos túl sokáig volt a Windows-ra korlátozva, és még mindig a .NET-re korlátozódik. Még mindig nincs olyan sok újdonság a PowerShellben, amely még ‘ még nem történt volna meg pl. a DCL-ben vagy a JCL-ben, de ezt (kissé) ízlésesen megtették.
  • @bmike Akkor miért nem csak a ksh-t használja? Az Apple szállítja a legfrissebb verziót. Magam, én már régen megdöbbentem a bash-t, és semmi okot nem látok arra, hogy most elkezdjem használni a zsh-t.
  • Ez a válasz egyáltalán nem írja le a bash és a zsh közötti különbségeket … és én ‘ nem vagyok egészen biztos abban, miért adhatom meg, hogy ” a macOS felhasználók 95% -a ne ‘ t használja a ” parancssort egy olyan felhasználó kérdése szempontjából, amely nyilvánvalóan használja a bash-ot.

Válasz

A shell szkriptjeim nem igazán olyan bonyolultak

A shell szkriptjei tartalmaznak shebang sorokat (#! /bin/bash vagy hasonló szavakkal kezdődnek)? Ha nem, akkor véletlenül használhatott egy bash szolgáltatást, ahol szkripteket futtat egy basebet használó shebang nélkül. Más héjak, például a kötőjel vagy a zsh, meghagyják az operációs rendszernek, amely általában a /bin/sh parancsot használja. A /bin/sh a macOS-on, és valószínűleg az is marad, a /bin/bash másolata, de a bash végrehajtása okoz ettől eltérő viselkedést. A részletek a Bash kézikönyv, 6.11 Bash POSIX mód . Néhány pont:

  1. A Bash biztosítja, hogy a POSIXLY_CORRECT változó be legyen állítva.

Ez a környezeti változó számos más eszköz viselkedését befolyásolhatja, különösen, ha GNU eszközök vannak telepítve.

  1. A folyamat helyettesítése nem érhető el.

A folyamat helyettesítése a <(...) vagy >(...) szintaxis.

  1. A . és source beépített fájlok nem keresik meg az aktuális könyvtárban a fájlnevet argumentum, ha nem a PATH keresésével találja meg.

Tehát ha a szkript . foo arra számít, hogy a jelenlegi könyvtárban egy foo nevű fájlt fog forrni, amely nem fog működni. Helyette . ./foo t kell tennie.

Amint a számokból kitalálhatja, sok kisebb különbség van a bash viselkedésében POSIX módban. A legjobb, ha a bash-t akarja használni a szkriptjeihez, akkor a legjobb a shebang használata.

Megjegyzések

  • Az ellenőrzés során úgy néz ki, hogy a shell szkriptek túlnyomó többségét írtam e, vagy használjon kifejezetten state / bin / bash-t a shebangban (nagyon kevés közülük) vagy state / bin / sh-t (majdnem mindegyiket), hogy legalább ne legyen kérdés. Köszönöm.
  • Úgy gondolom, hogy a folyamat helyettesítése már elérhető. A Catalinán is sikeresen kipróbáltam. Lásd: zsh.sourceforge.net/Intro/intro_7.html
  • @Siu továbbra is nyert ‘ t olyan szkriptek segítenek, amelyek a /bin/sh vagy a /bin/bash parancsot használják a shebangban. A Zsh csak az alapértelmezett interaktív shell, nem ‘ nem cserélte le a bash-t mindenhol
  • @muru Ah, megértem. Nem olvastam figyelmesen a választ, és úgy gondoltam, hogy a szerző a folyamat helyettesítéséről beszél, a zsh 😅

válaszban nem érhető el

A dolgok egyszerűségének szellemében …

Tudna valaki egyszerű gyakorlati megoldást nyújtani összehasonlítás vagy konkrét botlások, amelyeket tudnom kell, hogy elkezdhessek dolgozni azon, hogy készen álljak az új héjra, amikor a Catalina kiadásra kerül?

Ha az új alapértelmezett shell használatával gondolkodik, vegye figyelembe:

  • Ha örvényt akar adni a Zsh-nek, és érzi a különbségeket anélkül, hogy megváltoztatná a gép shell-beállításait, akkor: kipróbálhatja a Powerline10k-t egy Docker-tartályban , és megnézheti, hogy ez a teáscsészéje.
  • Ha nincs szüksége az összes harangra és fütyül, és a Bash-t használja csak az alapvető szkriptekhez, meglehetősen könnyű beállítani a héját, ahogyan mások itt kifejtették. És ha úgy dönt, szeretné használni a funkciókat a Bash 5-ben , ez meglehetősen triviális frissítést jelent a macOS számára .
  • Ha javítani akarja a szkriptek hordozhatóságát, hogy azok nagyobb valószínűséggel működjenek a várakozásoknak megfelelően, mindkét számban, tesztelje őket POSIX-megfelelőség szempontjából és távolítson el minden “basizmust”. “ ShellCheck -et használtam erre, és a kevésbé bonyolult szkripteknél is nagyon jól működik.

Bár egyetlen út sem tiszta ennek a három megközelítésnek kellő önbizalmat kell biztosítania ahhoz, hogy megalapozott döntést hozzon anélkül, hogy a problémát vagy a megoldási teret jobban át kellene gondolnia.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük