Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: _Děda_ 12 Března 2015, 22:03:27
-
Zdravím,
potřeboval bych z funkce vrátit dvě proměnné. Bylo by složité vysvětlovat, pro jaký konkrétní případ to potřebuji a tak přikládám jednoduchý příklad a odkaz kde jsem něco vyGooglil ale bohužel jsem stejně nedošel k správné syntaxi. Příklad z odkazu mě nefunguje (Ubuntu 14.04 LTS x64). Umožňuje vůbec Bash získat dvě proměnné z funkce pokud ano jak na to?
Předem díky za rady a jakoukoliv pomoc!
http://www.unix.com/shell-programming-and-scripting/220621-returning-capturing-multiple-return-values-function.html (http://www.unix.com/shell-programming-and-scripting/220621-returning-capturing-multiple-return-values-function.html)
#! /bin/bash
sectiOdecti() {
#echo "První sčítanec je: $1 druhý sčítanec je: $2"
local soucet=$(($1+$2))
#echo "Součet dvou čísel $1 a $2 je: $soucet"
local rozdil=$(($1-$2))
echo $soucet $rozdil
}
result=$(sectiOdecti 2 4)
echo "Navratové hodnoty funkce jsou: $result"
#Nefunkční pokus o zpracování dvou výstupních proměných
(sectiOdecti 4 3) | read vysledek rovnase
echo "1. Navratová hodnota funkce je: $vysledek"
echo "2. Navratová hodnota funkce je: $rovnase"
exit 0
-
1) nepouzivej v bashi local, je to hnus a je to zbytecny protoze bash proste nema ty scopy v platnosti
2) zamysli se nad problemem tvorive .. proc delat drbani se pravou rukou za levym uchem ? tenhle priklad je proste logicky spatne a kdyz se nad tim zamysli, tak stale nechapu, pri jake prilezitosti by se mi hodilo mucit vystup z nejake funkce abych ziskal 2 promenne .. navic ty promenne nastav v te funkci a misto local pouzivej spravne unset
#!/bin/bash
## spravne jak nechces
x() {
m=$(($1-$2));
n=$(($1+$2));
};
x $1 $2;
echo "rozdil $m";
echo "soucet $n";
unset m n x;
## divne jak chces
y() {
m=$(($1-$2));
n=$(($1+$2));
echo -e "$m|$n";
};
_out=$(y $1 $2);
echo "rozdil2 ${_out%%|*}";
echo "soucet2 ${_out##*|}";
unset _out y;
exit 0;
precti si http://mywiki.wooledge.org/BashFAQ/100 a sekci "removing part of string"
dalsi hint:
# echo xabyabz | awk -F "ab" '{print( $1 "\n" $2 "\n" $3); }'
x
y
z
-
Moc děkuji, za pomoc. Jdu přemýšlet jak vše udělat správně… Nebo alespoň né vědomě blbě :D
Takže na návrh mého skriptu se podívám pěkně od začátku.