Portál AbcLinuxu, 16. prosince 2025 23:12
if), která bude pravdivá jen když proměnná ($1) bude obsahovat jiné znaky než a-z, A-Z a 0-9. Přemýšlel jsem nad tím, ale zatím jsem nic nevykoumal.
[ivok@zero ~]$ echo abcd_EFGH123 |grep -q '[^a-zA-Z0-9]'; echo $? 0 [ivok@zero ~]$ echo abcdEFGH123 |grep -q '[^a-zA-Z0-9]'; echo $? 1
[[ "$1" == *[^a-zA-Z0-9]* ]] && echo fuj
pouzil jsem zapis [[ "$1" == [0-9] ]] pro zjisteni zda obsahuje jednocif. cislo.
stejne tak mi funguje i [[ "$1" == [0-9][0-9] ]] pro doucif. cisla
jenom nemuzu prijit na to jak pouzit u techto vyrazu operator || (nebo). At to pisu jak to pisu - nefunguje... Muzete mi poradit?if [[ "$1" == [0-9] ]] || [[ "$1" == [0-9][0-9] ]] then todo fiNebo
case "$1" in [0-9]|[0-9][0-9]) todo;; esaca nebo využít vymožeností bash 3.[01] a pak počítat s tím, že ve 3.2 ti něco třeba přestane fungovat
Nebo lépe:[[ "$1" == [0-9] ]] || [[ "$1" == [0-9][0-9] ]]
[[ "$a" == [0-9] || "$a" == [0-9][0-9] ]]
bashe tak trochu začíná srát. Takže v sekci CONDITIONAL EXPRESSIONS se dočtu, že se to týká [[, test a builtin [ a o spojování jednotlivých výrazů ani slovo s odkazem, že podrobněji v popisu builtin test. No tam se dočtu expr1 -o expr2
True if either expr1 or expr2 is true.
což v [[ nefunguje a dál jsem nic nenašel. No a k tomu se nám přidalo to nadělení s uvozovkama kolem argumentu =~. Řekl bych, že s takovou se raději poohlédnu po nějakém jiném shellu. Tohle není shell, ale bordel.
[[ "$1" == *[^a-zA-Z0-9-_/]* ]] && echo fuj
Díky.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.