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_temp
er2g_keep_temp
serã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 seustdout
será anexado ao possívelstdout
do comando executado a partir do valor der2g_keep_temp
e tudo será armazenado emr2g_multi
.
- Esse comando é executado com sucesso e seu
Ao todo, fuja disso: D