No seu código:
if [[ "$(echo "$2" | sed 's/.two//g')" == "load" ]] &&
[[ "$1" == "Decrypt" ]] ||
[[ "$(echo "$2" | sed 's/.two//g')" == "load" ]] &&
[[ "$1" == "Encrypt" ]]
A chamada sed pode ser simplificada para apenas: ${2%?two}
se a substituição estiver no final da variável $2
. Por favor, entenda que o "qualquer caractere" que o ponto (.) Representa em sed, é equivalente ao ponto de interrogação (?) Em padrões (obrigado @terdon). Se a substituição precisar ser feita para todas as ocorrências de .two
, devemos usar: "${2//?two}"
.
Então nós começamos esta versão mais curta:
if [[ "${2//?two}" == "load" ]] && [[ "$1" == "Decrypt" ]] ||
[[ "${2//?two}" == "load" ]] && [[ "$1" == "Encrypt" ]]
que está fazendo if A && B || C && D
.
Quando A é verdadeiro (load = load) B é executado.
Se B for verdadeiro (Descriptografar = Descriptografar), a seguinte frase ||
(C) será ignorada e
então D é executado (Decrypt = Encrypt).
Quais resultados (o último comando executado) em um valor false
.
Então o else
é executado .....
Suspeito que o que você quer dizer seja if ( A && B ) || ( C && D )
, que, como A
é igual a C
, é exatamente igual a if ( A && B ) || ( A && D )
,
que pode ser simplificado (usando a propriedade distributiva ) para o% if A && ( B || D )
:
if [[ "${2//?two}" == "load" ]] &&
( [[ "$1" == "Decrypt" ]] || [[ "$1" == "Encrypt" ]] );
then
key=aNXlye1tGbd0uP
else
if [ -z "$key" ]
then key="$2"
fi
fi
O teste -z
para "$ key" pode ser simplificado para uma expansão simples: key="$ {key: - $ 2}"
E, talvez, seria mais legível (IMO) assim:
if A; then
if B || D; then
Que se traduz assim:
if [[ "${2//?two}" == "load" ]]
then if [[ "$1" == "Decrypt" ]] || [[ "$1" == "Encrypt" ]]
then key=aNXlye1tGbd0u
else key="${key:-$2}"
fi
else key="${key:-$2}"
fi
Ou poderia, usando a ideia de @ terdon, ser escrito assim:
if [[ "${2//?two}" == "load" ]] &&
[[ "$1" =~ (De|En)crypt ]]
then key=aNXlye1tGbd0u
else key="${key:-$2}"
fi
Por favor, note que isto também é equivalente:
if [[ ( "${2//?two}" == "load" ) &&
( "$1" =~ (De|En)crypt )
]]
then key=aNXlye1tGbd0u
else key="${key:-$2}"
fi
Os parênteses não são estritamente necessários, mas adicionados para reforçar a idéia de que dentro de [[
test você poderia estruturar seus testes adicionando espaço em branco (tabulação, espaço, nova linha) e parênteses. Isso não funciona da mesma forma em [
tests.