Portál AbcLinuxu, 16. dubna 2024 18:17


Dotaz: Jak předat funkci v bash název proměnné?

4.2.2019 16:41 Zacatecnik
Jak předat funkci v bash název proměnné?
Přečteno: 380×
Odpovědět | Admin
Ahoj,

mám taková kód ale nefunguje to, může prosím někdo poradit?
VAR="4561"

function foo {
  echo ${1} ${2}
}

foo VAR "blabla" 

požadovaaný výsledek: 4561 blabla

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

4.2.2019 16:45 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Jak předat funkci v bash název proměnné?
Odpovědět | | Sbalit | Link | Blokovat | Admin
foo "$VAR" "blabla" 
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
k3dAR avatar 4.2.2019 16:51 k3dAR | skóre: 62
Rozbalit Rozbalit vše Re: Jak předat funkci v bash název proměnné?
Odpovědět | | Sbalit | Link | Blokovat | Admin
${VAR}
porad nemam telo, ale uz mam hlavu... nobody
4.2.2019 17:10 Zacatecnik
Rozbalit Rozbalit vše Re: Jak předat funkci v bash název proměnné?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jasně ale potřebuji naplnit tu proměnnou VAR až uvnitř funkce - jako by byla lokální a jako parametr předat jen název té proměnné. Díky

function foo {
  local VAR="4561"
  echo ${1} ${2}
}

foo VAR "blabla" 

požadovaaný výsledek: 4561 blabla
Řešení 1× (Michal Kubeček)
k3dAR avatar 4.2.2019 17:51 k3dAR | skóre: 62
Rozbalit Rozbalit vše Re: Jak předat funkci v bash název proměnné?
jasne, ale to nesmis puvodne psat spatne zadani ;-)
function foo {
  local VAR="4561"
  echo ${!1} ${2}
}

foo VAR "blabla" 
porad nemam telo, ale uz mam hlavu... nobody
Řešení 1× (Michal Kubeček)
xkucf03 avatar 4.2.2019 17:59 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: Jak předat funkci v bash název proměnné?
Odpovědět | | Sbalit | Link | Blokovat | Admin

V Bashi můžeš mít proměnnou proměnnou, takže jde napsat třeba:

VAR=4561
foo() { echo "${!1}" "$2"; }
foo VAR blabla

a vypíše to:

4561 blabla

Tzn. do funkce nepředáváš hodnotu proměnné, ale její název a hodnota se zjistí až uvnitř té funkce. Dá se takhle pěkně prasit… takže pokud nemáš hodně dobrý důvod, proč tohle dělat, tak to nedělej, protože to po tobě nikdo nepřečte (v případě delších skriptů).

Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
4.2.2019 23:08 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Jak předat funkci v bash název proměnné?
Odpovědět | | Sbalit | Link | Blokovat | Admin

Snadné řešení je "${!1}", jak už tu párkrát zaznělo. Já tedy přidám ještě jednu možnost — poor man’s pointer v Bashi. Čistě pro zajímavost.

VAR="4561"

function foo {
  local -r -n first_arg_ref="$1"
  local -r -i last_arg_name="$#"
  echo "$first_arg_ref" "${!last_arg_name}"
}

foo VAR "blabla"

Mimo funkci by to bylo declare -n místo local -n, ale jinak je princip stejný. To je drobné kouzlo, které umožňuje „dereferencovat“ „pointer“ bez vykřičníku, tj. chová se to pak jako reference. Super to je, když potřebuju předat do funkce několik polí. Nebýt -n, musel bych použít eval.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.