Как я могу упростить следующий код, если заявления? Спасибо

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
}

2 ответа2

2

хорошо, вот мульти-условная версия if, поскольку каждый оператор имеет одинаковую полезную нагрузку.

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

-o между терминами в if указывает отношение OR между условиями, а -a указывает на AND.

0

На mac он жаловался, поэтому я зашел на shellcheck.net и жаловался на -o но не сказал почему, просто сказал use || так я и сделал:

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

Я получал

$ 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'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .