Bash сокращение для запуска нескольких операторов test-and-or - PullRequest
0 голосов
/ 04 августа 2020

Предположим, у меня в bash есть следующее:

if [[ $cond1 = true ]]; then
  [[ $cond2 = true ]] && echo hello world || echo goodbye cruel world
fi

Вторая строка, по сути, является сокращением для оператора if-else (если, конечно, не выходит из строя часть echo hello world, в которой в случае echo goodbye cruel world тоже произойдет).

Можно ли объединить все три эти строки в одну, используя сокращенную запись? В более общем плане, можно ли запустить блок команд как единое целое?

# <> and </> denotes some special syntax (tbd) for specifying a block of commands
[[ $cond1 = true ]] && <> [[ $cond2 = true ]] && echo hello world || echo goodbye cruel world </>

Я полагаю, я мог бы сделать что-то вроде

[[ $cond1 = true ]] && eval '[[ $cond2 = true ]] && echo hello world || echo goodbye cruel world'

Я просто не фанат eval и необходимость избегать одинарных кавычек и т. Д.

1 Ответ

0 голосов
/ 04 августа 2020

С числами проще.

[ "${cond1}" -eq 1 ] && [ "${cond2}" -eq 1 ] && [ "${cond3}" -eq 1 ] && \
echo "hello world."

Так что да, это возможно, но не очень элегантно. Я бы, вероятно, вместо этого использовал: -

function command1 {
# Do some stuff here
echo "1" > stack
}

function command2 {
# Do some other stuff here
echo "1" > stack
}

function command3 {
# Do some other stuff here
echo "1" > stack
}

Затем я смогу сделать: -

[ $(wc -l stack | cut -d' ' -f1) -eq 3 ] && echo "Hello World!"

Так что три теста уменьшатся до одного.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...