Não há booleanos nos scripts do shell.
A melhor simulação para eles são valores inteiros.
Por exemplo, 0 para true e 1 para false .
[[ -v variable_name ]] retornará 1 se o variable_name não tiver sido definido ou 0 se for .
Portanto, você pode obter o comportamento desejado com isso:
// If one of the variables is defined, return value of this command is 0.
[[ -v r2g_keep_temp ]] || [[ -v r2g_multi_temp ]]
// Save the return value of the last command (0 or 1).
local r2g_multi="$?"
De courese, você pode interpretar os números como quiser, eu só queria demonstrar um exemplo.
A propósito,
local r2g_multi=$("$r2g_multi_temp" || "$r2g_keep_temp");
não é o que você deseja.
- Primeiro, as variáveis
r2g_multi_temper2g_keep_tempserão substituídas por seus valores. - Agora, o subshell tentará executar o valor de
r2g_multi_temp. - Se por algum milagre esse valor for um comando bash válido, haverá 2 casos:
- Esse comando é executado com sucesso e seu
stdouté salvo nor2g_multi. - Esse comando falhou e o subshell chamou o valor do
r2g_multi_temp.
História semelhante novamente, se for um comando válido, ele será executado e seustdoutserá anexado ao possívelstdoutdo comando executado a partir do valor der2g_keep_tempe tudo será armazenado emr2g_multi.
- Esse comando é executado com sucesso e seu
Ao todo, fuja disso: D