Переместить условия «если» в переменные

Я пишу файл git hook. У меня есть следующее условие:

current_branch_name=$(echo $(git branch | grep "*" | sed "s;* ;;")) merged_branch_name=$(echo $(git reflog -1) | cut -d" " -f 4 | sed "s;:;;") release_branch_name="release" develop_branch_name="develop" master_branch_name="master" hotfix_branch_name="hotfix/*" if [[ ($current_branch_name == $release_branch_name && $merged_branch_name == $develop_branch_name) || ($current_branch_name == $master_branch_name && $merged_branch_name == $hotfix_branch_name) ]] ; then #do something fi 

Я хотел бы переместить условия из оператора if в переменную. Я сделал:

 current_branch_name=$(echo $(git branch | grep "*" | sed "s;* ;;")) merged_branch_name=$(echo $(git reflog -1) | cut -d" " -f 4 | sed "s;:;;") release_branch_name="release" develop_branch_name="develop" master_branch_name="master" hotfix_branch_name="hotfix/*" is_merge_from_develop_to_release=$(($current_branch_name == $release_branch_name && $merged_branch_name == $develop_branch_name)) is_merge_from_hotfix_to_master=$(($current_branch_name == $master_branch_name && $merged_branch_name == $hotfix_branch_name)) if [[ $is_merge_from_develop_to_release || $is_merge_from_hotfix_to_master ]] ; then #do something fi 

Это дает мне ошибку для hotfix/* , но работает, если все условие вставлено в оператор if . Как правильно отделить условия от if ?

РЕДАКТИРОВАНИЕ (окончательная версия):

 function checkBranches { local current_branch=$(echo $(git branch | grep "*" | sed "s;* ;;")) local merged_branch=$(echo $(git reflog -1) | cut -d" " -f 4 | sed "s;:;;") hotfix_branch_name="hotfix/*" [[ $current_branch == "release" && $merged_branch == "develop" ]] && return 0 [[ $current_branch == "master" && $merged_branch == $hotfix_branch_name ]] && return 0 return 1 } if checkBranches ; then #do something fi 

Не очень экономит ваши строки, но вы можете использовать функцию:

 check_branch () { local current_branch=$(echo $(git branch | grep "*" | sed "s;* ;;")) local merged_branch=$(echo $(git reflog -1) | cut -d" " -f 4 | sed "s;:;;") local release_branch_name="release" local develop_branch_name="develop" local master_branch_name="master" local hotfix_branch_name="hotfix/*" [[ "$current_branch" == "$release_branch_name" && "$merged_branch" == "$develop_branch_name" ]] && return 0 [[ "$current_branch" == "$master_branch_name" && "$merged_branch" == "$hotfix_branch_name" ]] && return 0 return 1 } if check_branch; then #something fi 

Будут ли названия ваших филиалов часто меняться? Если нет, то имеет больше смысла просто сравнивать переменные со строками: release , develop , master , hotfix/* .

 case $(git branch |sed -nes/*\ //p )$( git -reflog 1|cut -d\ -f4 ) in release:develop\ | master:hotfix/*\ ) : hooray! esac 

С $(( )) вы можете делать арифметику, это не для сравнения строк.

В общем, вы можете конвертировать

 if cmd; then ... 

в

 var=$(cmd; echo $?) if [[ $var ]]; then 

Это выполнит cmd а затем отобразит возвращаемый статус cmd , присвоив его переменной var .