Объем переменной Bash

Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException вообще.

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

102
задан Fabio says Reinstate Monica 5 July 2019 в 13:36
поделиться

3 ответа

Поскольку Вы передаете по каналу в цикл с условием продолжения, оболочка sub создается для выполнения цикла с условием продолжения. Теперь этот дочерний процесс имеет свою собственную копию среды и не может пасовать назад переменные к ее родителю (как ни в каком процессе Unix).

Поэтому необходимо будет реструктурировать так, чтобы Вы не передавали по каналу в цикл. Кроме того, Вы могли работать в функции, например, и повторить значение, которое Вы хотите, возвратился из подпроцесса.

http://tldp.org/LDP/abs/html/subshells.html#SUBSHELL

111
ответ дан Community 24 November 2019 в 04:29
поделиться

Проблема состоит в том, что процессы, соединенные с каналом, выполняются в подоболочках (и поэтому имейте их собственную среду). Что бы ни случилось в эти while ни на что не влияет за пределами канала.

Ваш определенный пример может быть решен путем перезаписи канала к

while ... do ... done <<< "$OUTPUT"

или возможно

while ... do ... done < <(echo "$OUTPUT")
104
ответ дан mweerden 24 November 2019 в 04:29
поделиться
 #!/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

видят, помогают ли те изменения

1
ответ дан Kent Fredric 24 November 2019 в 04:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: