Portál AbcLinuxu, 10. května 2025 02:02
function in_array() { local x ENTRY=$1 shift 1 ARRAY=( "$@" ) [ -z "${ARRAY}" ] && return 1 [ -z "${ENTRY}" ] && return 1 for x in ${ARRAY[@]}; do [ "${x}" == "${ENTRY}" ] && return 0 done return 1 }
Řešení dotazu:
Prvý a druhý vrátia nenulovú hodnotu pre prípad, že je entry alebo array prázdne. Potom sa postupne porovnávajú prvky toho pola s hľadanou hodnotou a ak sa taký prvok nájde, vráti sa 0. Pre prípad, že ten cyklus prvok v poli nenájde, je na konci ešte jedno return.Na první pohled to tak skoro vypadá, že? :o)
ARRAY=( "$@" )je ztratit čas. Funkce prvního returnu je, aby funkce selhala, když je první prvek pole prázdný. Což je nejspíš pitomost, autor chtěl napsat
[ ${#ARRAY[@]} = 0 ]...ale popletl si to. Funkce druhého returnu je, aby funkce selhala, když je první argument funkce prázdný. To mi přijde taky jako pitomost -- proč by nemělo jít hledat v poli prázdný prvek? Funkce třetího returnu je, aby funkce uspěla, pokud argument funkce odpovídá některému slovu obsaženému v některé položce pole. Pokud chtěl autor porovnávat první argument fukce s prvky pole (nikoli se slovy v nich obsaženými), tak tohle domatlal taky. Funkce posledního returnu je, aby funkce selhala, když nic nenajde.
test "$?" = "0" && echo "alesgutes?" || echo "Něco je špatně"
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.