S eDoklady lze mít od ledna 2024 občanku v mobilní aplikaci [Digitální a informační agentura – DIA].
Google představil novou doménu nejvyššího řádu: .meme. Viz například knowyour.meme nebo find.meme.
IKEA představila 3 senzory pro chytrou domácnost: senzor na dveře a okna PARASOLL, bezdrátový pohybový senzor VALLHORN a senzor úniku vody BADRING. Budou kompatibilní s Home Assistant?
Weston, referenční implementace kompozitoru pro Wayland, byl vydán ve verzi 13.0.0. Přehled novinek v oznámení.
Laboratoře CZ.NIC vydaly novou verzi 4.23.0 aplikace Datovka, tj. svobodné multiplatformní desktopové aplikace pro přístup k datovým schránkám a k trvalému uchovávání datových zpráv v lokální databázi. Přidána byla podpora pro velkoobjemové datové zprávy (VoDZ) a pro typy datových schránek PFO_ARCH, PFO_AIAT a PFO_AZI. Další novinkou je pamatování velikosti dialogových oken, pozice ovládacích prvků, šířek sloupců a řazení položek
… více »Distribuce Tails specializující se ochranu online soukromí uživatele byla vydána ve verzi 5.20. Mimo jiné aktualizuje Tor Browser (13.0.4) a Thunderbird (115.5), opravuje několik chyb.
Bylo rozhodnuto, že Red Hat Enterprise Linux 10, jehož vydání je plánováno na první pololetí 2025, bude už bez X serverů. Zůstane pouze Xwayland.
Mobilní Datovka, tj. svobodná aplikace pro přístup k datovým schránkám pro zařízení s operačním systémem iOS a Android, byla minulá týden vydána v nové verzi 2.0.0. Zásadně bylo zmodernizováno uživatelské rozhraní. Přibyla možnost přepínat aplikaci mezi světlým a tmavým režimem. Současně byl publikován rozhovor QaA: Projekt Datovka očima vývojářů.
Multiplatformní open source aplikace scrcpy (Wikipedie) pro zrcadlení obrazovky i audia připojeného zařízení se systémem Android na desktopu a umožňující ovládání tohoto zařízení z desktopu, byla vydána v nové verzi 2.3.
Včera skončila upstream podpora PHP 8.0. Podporované verze jsou 8.1, 8.2 a 8.3.
read y ${pole[$y]}ale v okamziku preklepu jsem na mrtvem bode.
check() { what=$1 shift for i in $@; do [ "$what" = "$i" ] && return 0 done return 1 } while true; do read x check $x alpha beta gamma && break done echo $x
while true; do read x check $x alpha beta gamma && break doneJe-li splněna podmínka true, provede se cyklus. Protože následně volám funkci, která vrací true, nebo false, cyklus bud probehne, nebo ne. Volám funkci check a $x, kterou zadal uživatel odesílám jako první poziční parametr. alpha beta gamma odesílám jako další poziční parametry. Takže takhle může přece odeslat přímo to pole a zpracuje se to stejně???
check $x ${pole[*]}funkce check() definuju promenou what=$1, což znamená, že ji přiřadím první poziční prametr, tedy naše $x, který zadal uživatel. shift zajistí posun poz. par. a následně v cyklu for přiřadím prom. i všechny poziční parametry pomocí $@.
[ "what" = "i" ] && return 0jestli se what = i, tedy jestli naše zadané $x se najde ve výpisu poz. par. ($@), pak funkce vrátí nepravdu a protože podmínka cyklu while nebyla splněna, cyklus neproběhne a script pokračuje dalším příkazem. Zde mám nejasnost s shift. Neměl by být umístěn později? Když posunu poz. param., tak $1 zmizí a na její místo se posune $2. To by přece znamenalo, že už potom nebude figurovat v $@ a tedy se nesplní podmínka [ "what" = "i" ] No ono to funguje, takže tohle nechápu. Mě připadá logické umístit shift na konec funkce.
check
očekává jako 1. parametr to zadané x (jehlu) a na všech dalších pozicích seznam povolených hodnot (kupku sena). Když si do what
přiřadím $1
a provedu shift
, v seznamu parametrů mi zbudou jen ty povolené hodnoty. Pokud je při provádění cyklu splněna podmínka [ "$what" = "$i" ]
, znamená to, že jehla se v kupce sena našla a funkce tím pádem vrátí pravdu (nulová návratová hodnota znamená úspěch). Pokud cyklus proběhne do konce a jehla se nenajde, funkce vrátí 1, což značí neúspěch. check
bych nazval funkcí s negativním očekáváním.
Cyklus while true
sám o sobě nikdy neskončí – true
bude pravda až do konce světa check $x alpha beta gamma && break
znamená, že v případě úspěchu funkce check()
se nekonečný cyklus přeruší a program pokračuje dál. break
je jedna z možností, jak přerušit nekonečný cyklus. Jestli z nějakého jazyka znáš cyklus s logikou do – while
, tak tohle je obezlička pro jazyky, které mají jen while – do
:
while (true) { delej_neco(); if (!podminka) { break; } }Volání pomocí
check $x ${pole[*]}
je samozřejmě v pořádku.
${pole[@]}
místo ${pole[*]}
popř. $@
místo $*
kde to jen jde, poměrně často se vyskytne podmínka že hodnoty v poli mohou obsahovat mezery.
A="ls -a"
$A
spustí ls s parametrem -a. V tomhle případě je jedno, co je tam za proměnnou, důležité je, že její výskyt není v uvozovkách. Když to dáme do uvozovek, žádná expanze na pole se neprovede:
A="ls -a"
"$A"
zahlásí chybu, že program "ls -a" neexistuje. Je ale výjimka: pokud do uvozovek dáte proměnnou $@ nebo ${xxx[@]}, expanze na pole se provede, ale ne podle IFS (mezery apod.), ale tak, aby byly zachovány původní parametry/prvky pole. Příklad (spusťte a sledujte chybové hlášky):
set ls "adresář neexistuje"
$*
"$*"
$@
"$@"
Závěr: když nechcete expanzi, používejte @ místo * a dávejte to do uvozovek.
in_array() { local i needle=$1 shift 1 for i in "$@"; do [[ "$i" == "$needle" ]] && return 0 done return 1 } pole[0]=foo pole[1]=bar pole[2]="dve slova" read slovo in_array $slovo "${pole[@]}" && echo ok
in_array() { local i needle=$1 shift 1 # array() undefined [ -z "$1" ] && return 1 for i in $@ do [ "$i" == "$needle" ] && return 0 done return 1 } pole[0]=foo pole[1]=bar pole[1]="dve slova" read slovo if in_array $slovo ${pole[@]}; then echo ok else echo ko fi
# array() undefined
[ -z "$1" ] && return 1
Tohle je hodně divné. Proč by se v poli, které začíná prázdným řetězcem, nemělo dát nic najít?
Tiskni
Sdílej: