Это проблема с цитатой, вам нужно:
projectID=$(
cat file.json | jq -r ".resource[] | select(.username=='$EMAILID') | .id"
)
Если вы поместите одинарные кавычки , чтобы разграничить основную строку, оболочка принимает $EMAILID
буквально.
«Двойная кавычка» каждого литерала, содержащего пробелы / метасимволы, и разворота каждого : "$var"
, "$(command "$var")"
, "${array[@]}"
, "a & b"
. Используйте 'single quotes'
для кода или литерала $'s: 'Costs $5 US'
, ssh host 'echo "$HOSTNAME"'
. См. http://mywiki.wooledge.org/Quotes http://mywiki.wooledge.org/Arguments http: //wiki.bash-hackers. org / syntax / words
Все зависит от того, что делает геттер. Если это простой getter (получение члена данных), тогда JVM сможет встроить его «на лету», если он определит, что этот код является «горячей точкой» для производительности. На самом деле, почему JVM Oracle / Sun называется «HotSpot». :-) Он будет применять агрессивную оптимизацию JIT, где он видит, что ему это нужно (когда это возможно). Если геттер делает что-то сложное, то, естественно, может быть медленнее использовать его и повторить эту работу.
Если код не является «горячей точкой», конечно, вам все равно, разница в производительности.
Кто-то однажды сказал мне, что встроенный геттер иногда может быть быстрее, чем значение, кэшированное локальной переменной, но я никогда не доказывал это самому себе и не знаю теории почему это было бы так.
Я предпочитаю второй блок кода, потому что он присваивает foo, а затем foo не может изменить на null / notnull.
Часто требуется нуль, и Java должен решить эту проблему с помощью оператора Elvis:
if (someObject.getFoo()?.equals(someOtherString)) {
return;
}
Оба они выглядят одинаково, даже Performance wise. Используйте 1-й блок, если вы уверены, что больше не будете использовать возвращаемое значение, если нет, используйте второй блок.
Вы можете опустить первую нулевую проверку, так как equals делает это для вас:
Результат является истинным тогда и только тогда, когда аргумент не является нулевым и является объектом String, который представляет одну и ту же последовательность символов как этот объект.
blockquote>Итак, лучшее решение просто:
if(someOtherString.equals(someObject.getFoo())
Использовать второй блок. Первый блок, скорее всего, будет оптимизирован ко второму, а второй - более читабельным. Но главная причина заключается в том, что если someObject когда-либо обращается к другим потокам, и если оптимизация каким-то образом отключается, первый блок не будет исключать исключения исключений NullPointerException.
Также: даже без многопоточности, если someObject случайно сделана volatile , оптимизация исчезнет. (Плохо для производительности и, конечно же, очень плохо с несколькими потоками). И, наконец, второй блок будет проще использовать отладчик (не то, что , что когда-либо понадобится.)