Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: VYŘEŠENO: Bash - funkce - dvě návratové hodnoty  (Přečteno 1995 krát)

_Děda_

  • Návštěvník
  • *
  • Příspěvků: 25
    • Zobrazit profil
VYŘEŠENO: Bash - funkce - dvě návratové hodnoty
« kdy: 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

Kód: [Vybrat]
#! /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
« Poslední změna: 13 Března 2015, 19:16:50 od _Děda_ »

ntz_reloaded

  • Lokaj
  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3735
  • skill :: ur home erly
    • Zobrazit profil
Re:Bash - dvě návratové hodnoty proměnné
« Odpověď #1 kdy: 12 Března 2015, 23:07:53 »
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

Kód: [Vybrat]
#!/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:

Kód: [Vybrat]
# echo xabyabz | awk -F "ab" '{print( $1 "\n" $2 "\n" $3); }'
x
y
z
« Poslední změna: 12 Března 2015, 23:32:24 od ntz_reloaded »
tikejte mi, taky Vam tikam ...
song of the day - openSUSE, openindiana, DuckDuckGo
The noise ain't noise anymore, who's to blame, WHO'S TO BLAME ??

_Děda_

  • Návštěvník
  • *
  • Příspěvků: 25
    • Zobrazit profil
Re:Bash - funkce - dvě návratové hodnoty
« Odpověď #2 kdy: 13 Března 2015, 19:15:40 »
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.

 


Provoz zaštiťuje spolek OpenAlt.