Bash: целое выражение ожидаемое, использующее чтение/тест

Пакеты повышения вставляются, таким образом, у Вас может на самом деле быть больше чем одна установленная версия.

Для появления что версия просто выйдите:

emerge -a =dev-libs/boost-1.39.0

Если Вы хотите удалить более новую версию (довольно опасный, у Вас могло бы быть много материала, зависящего от нее), Вы могли:

emerge --unmerge =dev-libs/boost-1.46.1-r1

и выполненный a revdep-rebuild впоследствии.

Для переключения среды от одной версии до другого (если Вы сохранили обоих) использовать eselect boost list/set.

7
14.07.2012, 02:38
2 ответа

На самом деле можно установить некоторые атрибуты на переменных с помощью declare (или старое typeset) встроенный. declare -i var1 var2 установит целочисленный атрибут на тех переменных. После этого присвоения, которые пытаются установить значения нецелого числа к тем переменным, повысят ошибку.

Но Ваша проблема с синтаксисом. При использовании значения переменной необходимо снабдить префиксом его имя $:

if [ "$var1" -lt "$var2" ]; then
    echo "$var1 is lt $var2"
else
    echo "$var2 is lt $var1"
fi

Исключениями являются арифметические оценки, где никакая потребность не для $:

if ((var1<var2)); then
    echo "$var1 is lt $var2"
else
    echo "$var2 is lt $var1"
fi

Как слово предупреждения, внутри [..] всегда двойная кавычка Ваши переменные для предотвращения расширения слова, портящего синтаксис выражения. (Я имею в виду, у Вас будут проблемы с переменными сброса, переменные, содержащие пустую строку и переменные, содержащие IFS символы.) Или можно использовать более новое и лучшее [[..]] вместо этого, который обрабатывает такие случаи правильно:

if [[ $var1 -lt $var2 ]]; then
    echo "$var1 is lt $var2"
else
    echo "$var2 is lt $var1"
fi
11
27.01.2020, 20:16
  • 1
    Кроме того, [[ $var1 < $var2 ]] сравнение строк, не арифметическое сравнение... [[ 11 > 2 ]] тесты как ложь... [[ 11 -gt 2 ]] тесты как истинный –  Peter.O 13.07.2012, 20:24
  • 2
    @Peter. O, Вы правы. Так как я использую только арифметическую оценку для числовых сравнений, я забыл это.Спасибо. –  manatwork 13.07.2012, 20:27

Необходимо сослаться на переменные, предварительно ожидающие имя с $

if [ $var1 -lt $var2 ] ; then...
1
27.01.2020, 20:16
  • 1
    , И необходимо заключить те переменные в кавычки "$var1" -lt "$var2" если у Вас нет очень серьезного основания для того, чтобы не сделать так. –  roaima 10.11.2016, 11:43

Теги

Похожие вопросы