W skryptach bash staram się, aby moje zmienne były lokalne dla funkcji, gdzie tylko mogę, a następnie przekazać to, czego potrzebuję, z funkcji takich jak poniżej
#!/bin/bash
function FUNCTION() {
local LOCAL="value"
echo "$LOCAL" # return this variable
}
GLOBAL=$(FUNCTION)
echo "$GLOBAL"
Ale czy można to zrobić, uwzględniając własne echa funkcji, więc jeśli funkcja ma własne komunikaty do wysłania, nie muszę ich chwytać w zmiennej
#!/bin/bash
function FUNCTION() {
local LOCAL="value"
echo "$LOCAL" # return this variable
echo "This function is done now" # do not return this variable
}
GLOBAL=$(FUNCTION)
echo "$GLOBAL" # should only echo 'value'
bash
shell-script
function
TheLovelySausage
źródło
źródło
function foo()
składni? Możesz uzyskać lepszą zgodność z POSIX dzięki 9 mniejszym klawiszom.Odpowiedzi:
Wszystko, co wydrukuje funkcja, może zostać przechwycone, jeśli przechwycisz właściwy strumień wyjściowy. Tak więc najłatwiejszym sposobem wydrukowania czegoś i zapisania innego wyjścia jest przekierowanie zbędnego wyjścia na standardowy błąd:
Inną możliwością jest zalogowanie się do pliku zamiast bezpośredniego drukowania komunikatów dziennika, na przykład przy użyciu czegoś takiego:
To powiedziawszy, funkcje Bash nie mogą zwracać zmiennych . Jedyną faktyczną wartością „return” jest kod wyjścia. Z tego powodu ( i wielu innych ), jeśli chcesz niezawodnego rejestrowania, zwracania wartości, obsługi wyjątków i innych, będziesz chciał użyć innego języka, takiego jak Python, Ruby lub Java.
źródło
Możesz wyświetlać komunikaty informacyjne o standardowym błędzie:
Kilka innych sugestii znajduje się w tym artykule w Linux Journal : użyj zmiennych globalnych (o których wspomniałeś, że nie wolisz) lub przekaż nazwę zmiennej, aby zwrócić wynik.
źródło
/dev/stderr
wskazuje na fd 2 i nadal można go przekierować za pomocą&>blah
lub2>blah
./dev/tty
może lepiej.