Portál AbcLinuxu, 8. května 2025 15:33
VAR="4561" function foo { echo ${1} ${2} } foo VAR "blabla" požadovaaný výsledek: 4561 blabla
Řešení dotazu:
foo "$VAR" "blabla"
function foo { local VAR="4561" echo ${1} ${2} } foo VAR "blabla" požadovaaný výsledek: 4561 blabla
function foo { local VAR="4561" echo ${!1} ${2} } foo VAR "blabla"
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ů).
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
.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.