В скриптах bash я стараюсь держать свои переменные локальными для функций везде, где могу, а затем пропускаю то, что мне нужно, из функций, таких как ниже.
#!/bin/bash
function FUNCTION() {
local LOCAL="value"
echo "$LOCAL" # return this variable
}
GLOBAL=$(FUNCTION)
echo "$GLOBAL"
Но возможно ли это сделать, включив собственный эхо функции, чтобы, если у функции есть собственные сообщения для вывода, мне не нужно было перехватывать их в переменной
#!/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
источник
источник
function foo()
синтаксис? Вы можете получить лучшую совместимость с POSIX с меньшим количеством нажатий клавиш.Ответы:
Все, что напечатано функцией, может быть захвачено, если вы захватите правильный поток вывода. Поэтому самый простой способ напечатать что-нибудь и сохранить какой-либо другой вывод - перенаправить лишний вывод на стандартную ошибку:
Другая возможность - войти в файл, а не печатать сообщения журнала напрямую, например, используя что-то вроде этого:
Тем не менее, функции Bash не могут возвращать переменные . Единственным фактическим значением «return» является код выхода. По этой причине ( и многим другим ), если вам нужна надежная регистрация, возвращаемые значения, обработка исключений и многое другое, вы захотите использовать другой язык, такой как Python, Ruby или Java.
источник
Вы можете представить информационные сообщения о стандартной ошибке:
Некоторые другие предложения содержатся в этой статье Linux Journal : используйте глобальные переменные (которые вы упомянули, что вы не предпочитаете), или передайте имя переменной, чтобы вернуть результат.
источник
/dev/stderr
указывает на fd 2 и все еще может быть перенаправлен с помощью&>blah
или2>blah
./dev/tty
может быть лучше.