Перейти к содержимому

объединить несколько ifs bash

0

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

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 [[ $ = *"$changed_text"* ]];then dirty=true fi  if [[ $ = *"$changes_not_staged"* ]];then dirty=true fi  if [[ $ = *"$untracked_files"* ]];then dirty=true fi  echo $dirty } 
276 просмотров
codyc4321 спросил 9 лет назад
C 188

2 ответа

2
Принятый ответ

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

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

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

Frank Thomas ответил 9 лет назад
F 27 026
0

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

if [[ $ = *"$changed_text"* || $ = *"$changes_not_staged"* || $ = *"$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 [[ $ = *"$changed_text"* -o $ = *"$changes_not_staged"* -o $ = *"$untracked_files"* ]]; then' 
codyc4321 ответил 9 лет назад
C 188