Я получаю строку, которая может быть либо полностью числовой, разделенной дефисом, и в этом случае она будет приемлемой для меня (например, 123423-56788-456522-34245
), либо не полностью числовой и все еще разделенной дефисомв этом случае это неприемлемо для меня (например, 123423-56788-shelve-34245
).
Чтобы определить, является ли строка приемлемой, я построил следующий блок if:
REGEX_FOR_ONLY_NUMERICAL_CHANGELISTS='^[0-9-]+$'
if [[ ${BUILD_ID} =~ ${REGEX_FOR_ONLY_NUMERICAL_CHANGELISTS} ]]
then
echo true
else
echo false
fi
Вышеприведенный блок if работает нормально.Однако, если бы я программировал на другом языке (например, Java), я бы назначил оценку непосредственно в переменную.Например:
int a = 3;
int b = 5;
boolean test = (a < b);
Выше test
будет true
: я буду оценивать выражение (a < b
) и сохранять его результат в переменной test
в одной строке.
Я хотел бы знать, возможно ли сделать то же самое в Bash.Оглядываясь в Интернете, я не нашел много примеров.Благодаря этому ответу я понял, что если я сделаю это:
bash$ false_expression=$((2 == 4))
bash$ true_expression=$((2 == 2))
... две переменные принимают значения 0
и 1
соответственно.Это не совсем true
или false
, но я все еще могу это принять.Однако я не могу сделать то же самое с моим выражением, потому что, если я сделаю это:
InvalidCL=123423-56788-shelve-34245
MyRegex='^[0-9-]+$'
FalseExpression=$((${InvalidCL} =~ ${MyRegex}))
... третье назначение вызовет эту ошибку:
-bash: 123423-56788-shelve-34245 =~ ^[0-9-]+$: attempted assignment to non-variable (error token is "=~ ^[0-9-]+$")
Я не настоящий эксперт по bash, поэтому мой вопрос (надеюсь, это не слишком глупо): возможно ли присвоить оценку переменной? Я вижу, что мой if [[ myExpression ]]
оценивается какtrue
, поэтому я не понимаю, почему я не смогу присвоить эту оценку переменной ... Кто-нибудь может объяснить, пожалуйста?