Portál AbcLinuxu, 28. října 2025 16:25
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.