#bash #conditional-operator
Вопрос:
(псевдо) код для того, что я хочу сделать:
n=100
desired=""
for i in {1..10} ; do
(( $(numeric_command_output) < n ?
set n to the output and desired to $i :
keep n and desired unchanged )) ; done
Я знаю, как манипулировать одной переменной на основе условия с помощью тернарного оператора, но можно ли это сделать в bash?
Ответ №1:
Можно ли использовать тернарный оператор для задания значений нескольким переменным?
ДА.
но можно ли это сделать в bash?
ДА.
(( ( tmp=$(numeric_command_output) ) < n ? (n=tmp, desired=$i) : 0 ))
или
(( tmp=$(numeric_command_output, tmp < n ? (n=tmp, desired=$i) : 0 ))
Комментарии:
1. похвала! хотя, безусловно, есть гораздо более простые и читаемые способы сделать это, мне просто не терпелось посмотреть, можно ли это сделать. Я не знал об операторе списка
,
для арифметической оценки в bash. Спасибо!… только одно, является: 0
ли часть для обозначения арифметикиfalse
?2.
the list , operator
en.wikipedia.org/wiki/Comma_operator: 0 part to signify arithmetic false
Нет, просто должно быть что-то после:
.0
возможно, это плохой выбор, потому что он ложный,set -e
может выйти из сценария, было бы лучше поставить что-то положительное.3. «было бы лучше положить что-то положительное». или, в данном случае
continue
? Я имею в виду, что мы находимся в последней командеfor
блока.4.
continue
является неопределенной переменной, которая будет вычисляться0
внутри((
команды. Еслиconitnue=something
только тогда это не будет оценено. Я бы поставил там что-то вроде7
, потому что это к счастью в моей культуре, или1
.we are at the last command of the for block
((
Команда не оценивает команды и не влияет на поток управления.((
Команда вычисляет только арифметические выражения. gnu.org/savannah-checkouts/gnu/bash/manual/…