Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. Поскольку Вы передаете по каналу в цикл с условием продолжения, оболочка sub создается для выполнения цикла с условием продолжения. Теперь этот дочерний процесс имеет свою собственную копию среды и не может пасовать назад переменные к ее родителю (как ни в каком процессе Unix).
Поэтому необходимо будет реструктурировать так, чтобы Вы не передавали по каналу в цикл. Кроме того, Вы могли работать в функции, например, и повторить значение, которое Вы хотите, возвратился из подпроцесса.
Проблема состоит в том, что процессы, соединенные с каналом, выполняются в подоболочках (и поэтому имейте их собственную среду). Что бы ни случилось в эти while
ни на что не влияет за пределами канала.
Ваш определенный пример может быть решен путем перезаписи канала к
while ... do ... done <<< "$OUTPUT"
или возможно
while ... do ... done < <(echo "$OUTPUT")
#!/bin/bash
OUTPUT="name1 ip ip status"
+export XCODE=0;
if [ -z "$OUTPUT" ]
----
echo "CRIT: $NAME - $STATUS"
- echo $((++XCODE))
+ export XCODE=$(( $XCODE + 1 ))
else
echo $XCODE
видят, помогают ли те изменения