Как будто вы пытаетесь получить доступ к объекту, который является null
. Рассмотрим ниже пример:
TypeA objA;
. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException
, что имеет смысл.
См. Также этот пример:
String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
отправить вывод терминала в stderr:
function test_function {
echo "Echo value to terminal" >&2
echo "return value"
}
Не используйте подстановку команд для получения возвращаемого значения из функции
Возвращаемое значение всегда доступно в переменной $?
. Вы можете использовать переменную, а не использовать команду substitution
Test
$ function test_function {
> return_val=10;
> echo "Echo value to terminal $return_val";
> return $return_val;
> }
$ test_function
Echo value to terminal 10
$ return_value=$?
$ echo $return_value
10
$()
создает новую подоболочку. увеличение нагрузки
– nu11p01n73R
6 January 2015 в 05:07
Тем не менее решение, отличное от отправки в STDERR (может быть предпочтительным, если ваш STDERR имеет другое использование или может быть перенаправлен вызывающим абонентом)
Это решение направляет прямо на терминал tty:
function test_function {
echo "Echo value to terminal" > /dev/tty
echo "return value"
}
uname -a
, man uname
или echo $OS
. Или, возможно, вам нужно определить дистрибутив (например, Linux). Файл устройства tty не гарантированно находится в одном месте.
– Robin Hsu
6 January 2015 в 08:55
Systemd
?
– PairedPrototype
30 November 2017 в 02:36
Systemd
, и я не знаком с Systemd
. Сожалею. Возможно, вы должны задать новый вопрос,
– Robin Hsu
25 December 2017 в 08:56
&255
, поэтому, если stderr также перенаправлен, вы можете сообщить пользователю, используя>&255
вместо>&2
– Jasen 19 October 2016 в 21:38