Portál AbcLinuxu, 12. května 2025 02:02
#!/bin/bash function my_fnc () { ARR=() ARR+=("1") ARR+=("2") ARR+=("3") ARR+=("4") return $ARR } VAR=( ${my_fnc} ) echo ${VAR[@]}Díky za pomoc
Řešení dotazu:
return: return [n] Return from a shell function. Causes a function or sourced script to exit with the return value specified by N. If N is omitted, the return status is that of the last command executed within the function or script. Exit Status: Returns N, or failure if the shell is not executing a function or script.Jasné? Shell není C/Java/whatever. Funkce je spíš takový skriptlet a return vrací status jako ze subprocesu. Vytvářet pole z funkce obecně nedoporučuji. Pro práci s komplexními datovými strukturami není shell vhodný nástroj. You have been warned... (a)
my_func() { ARR=(1 2 3 4) } # prostě nastaví ARR my_func(b)
my_func() { echo 1 2 3 4 } # nastaví ARR podle na výstup my_func rozdělený na slova ARR=($(my_func))(c) komplexní varianty se změnou IFS a jánevímčeho...
exit
-> $?
).
Pokud je i tak potřeba hrát si v Bashi na programování silnější než použití k tomu vhodného nástroje, tak je to samozřejmě možné. Pokud vezmeme, že funkce bude vždy vracet pole, tak můžeme přepsat takto:
#!/bin/bash function my_fnc() { local ARR=() ARR+=("1") ARR+=("2") ARR+=("3") ARR+=("4") echo ${ARR[@]} } VAR=($(my_fnc)) echo ${VAR[@]}
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.