Portál AbcLinuxu, 18. března 2026 14:19
#!/bin/bash
func1() {
FOO="bar"
}
func2() {
echo $FOO
}
func1
func2
A výstupem je normálně
$ sh foo bar $Předávání proměnných rourou jsem nikdy neviděl.
příkaz1|příkaz2 ... Každý z nich se pouští v jiné instanci shellu, takže nemají společný environment, až na "defaultní" a exportované proměnné. Řešením je nejspíš export, pokud ne, není to úloha pro shell, ale pro nějaký skriptovací jazyk
jak předat v rámci jednoho Bash skriptu hodnoty proměnných mezi funkcí a zbytkem skriptuJe pravda, že jsem si to četl několikrát, ale pochopil jsem to tak, že se snaží předávat proměnné prostřednictvím roury, což je šílenost, protože proměnné v shellu jsou (pokud vím) globální.
. Ale autor se zatím neozval.
(FOO=bar) echo $FOOUž se to tu v jedné diskusi rozebíralo docela podrobně, snad ji lze najít...
echo $$', vypíše se třikrát totéž. Takže ty funkce sice běží v samostatných shellech, ale ty předstírají, že se jedná pořád o ten původní…
man bash:
$ Expands to the process ID of the shell. In a () subshell, it
expands to the process ID of the current shell, not the sub-
shell.
$FIFO=/tmp/fifo
rm -f $FIFO
mkfifo $FIFO
func1() {
(echo -e "foo\nbar" > $FIFO)&
FOO="bar"
}
func2() {
grep 'foo' $FIFO
}
func1
func2
echo FOO: $FOO
rm -f $FIFO
trap 'rm -f $FIFO' EXITnebo
clean_up() {
rm -f $FIFO
}
trap clean_up EXIT
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.