combina vários ifs bash

0

como posso simplificar o seguinte código se as instruções? Obrigado

function git_dirty {
    text=$(git status)
    changed_text="Changes to be committed"
    changes_not_staged="Changes not staged for commit"
    untracked_files="Untracked files"

    dirty=false

    if [[ ${text} = *"$changed_text"* ]];then
        dirty=true
    fi

    if [[ ${text} = *"$changes_not_staged"* ]];then
        dirty=true
    fi

    if [[ ${text} = *"$untracked_files"* ]];then
        dirty=true
    fi

    echo $dirty
}
    
por codyc4321 09.03.2017 / 17:48

2 respostas

2

bem, aqui está uma versão multi-condicional do if, já que cada declaração tem a mesma carga útil.

if [[ ${text} = *"$changed_text"* -o  ${text} = *"$changes_not_staged"* -o ${text} = *"$untracked_files"*]];then
            dirty=true
        fi

-o entre os termos em um if especifica um relacionamento OR entre as condições e -a especifica um AND.

    
por 09.03.2017 / 17:59
0

No mac, ele reclamou, então eu fui ao shellcheck.net e ele reclamou sobre -o mas não disse por que, apenas disse use || , então eu fiz:

if [[ ${text} = *"$changed_text"* ||  ${text} = *"$changes_not_staged"* || ${text} = *"$untracked_files"* ]]; then
        dirty=true
    fi

Eu estava recebendo

$ src
-bash: /Users/cchilders/.bash_profile: line 384: syntax error in conditional expression
-bash: /Users/cchilders/.bash_profile: line 384: syntax error near '-o'
-bash: /Users/cchilders/.bash_profile: line 384: '    if [[ ${text} = *"$changed_text"* -o  ${text} = *"$changes_not_staged"* -o ${text} = *"$untracked_files"* ]]; then'
    
por 09.03.2017 / 22:58