Есть ли любое существенное различие при сравнении переменной как строки или как интервал

Темы в масштабе всей системы хранятся в /usr/local/share/themes; пользовательские темы хранятся в ~/.themes. Необходимо будет создать или отредактировать файлы ~/.gtkrc-2.0 и ~/.gtkrc-2.0-kde4. Существует также графический интерфейс в Центре управления KDE, Стилях GTK и Шрифтах. Пример:

$ cat .gtkrc-2.0-kde4
# This file was written by KDE
# You can edit it in the KDE control center, under "GTK Styles and Fonts"

# Include gtkrc for the desired themes
include "/usr/local/share/themes/mytheme/gtk-2.0/gtkrc"
gtk-theme-name="mytheme"
gtk-font-name="myfont"
23
11.07.2014, 02:25
3 ответа
[

] Да, много различий. Например, []=[] проверяет точное равенство строк, но []-eq[] вычисляет оба выражения арифметически перед проверкой равенства:[

] [
$ [ " 1 " -eq 1 ] && echo equal || echo not
equal
$ [ " 1 " = 1 ] && echo equal || echo not
not

$ [ +1 -eq 1 ] && echo equal || echo not
equal
$ [ +1 = 1 ] && echo equal || echo not
not

$ [ "0+1" -eq 1 ] && echo equal || echo not
equal
$ [ "0+1" = 1 ] && echo equal || echo not
not
] [

]Также пустая строка оказывается численно равной нулю: [

] [
$ [ "" -eq 0 ] && echo equal || echo not
equal
$ [ "" = 0 ] && echo equal || echo not
not
] [

]А при введении операторов сравнения в - учитывая []<[] vs []-lt[], например:[

] [
$ [[ 2 -lt 10 ]] && echo less || echo not
less
$ [[ 2 < 10 ]] && echo less || echo not
not
] [

]Это происходит потому, что строка "2" находится в алфавитном порядке после строки "10" (так как 1 приходит до 2), а число "2" численно меньше числа "10". [

]
19
27.01.2020, 19:42
[

] В дополнение к тому, что было сказано. [
] Сравнение для равенства быстрее с числами, хотя в shell скриптинге редко бывает необходимо быстрое вычисление. [

] [
$ b=234
$ time for ((a=1;a<1000000;a++)); do [[ $b = "234" ]]; done

real    0m13.008s
user    0m12.677s
sys 0m0.312s

$ time for ((a=1;a<1000000;a++)); do [[ $b -eq 234 ]]; done

real    0m10.266s
user    0m9.657s
sys 0m0.572s
]
2
27.01.2020, 19:42
[

]Сравнение целых и строк становится наиболее значимым при сравнении больше или меньше, чем:[

] [
#!/bin/bash

eleven=11
nine=9

[[ $nine < $eleven ]] && echo string   # fail

[[ "$nine" -lt "$eleven" ]] && echo integer # pass
] [

]Первое не удается, потому что при лексикографической сортировке 9 приходит после 11.[

] [

]Обратите внимание, что использование кавычек не определяет, сравниваете ли вы строки или числа, это делает оператор. Можно добавлять или удалять приведенные выше кавычки, это не имеет никакого значения. Бэш ловит неопределенные переменные в двойных скобках, поэтому кавычки не нужны. Использование кавычек с одинарными скобками при численном тестировании не спасет вас, так как:[

] [
[ "" -lt 11 ]
] [

]- это все равно ошибка ("требуется целочисленное выражение"). Эффективной защитой при сравнении строк в одинарных скобках являются кавычки:[

] [
[ "" \< 11 ]
] [

]Замечание в скобках []double[], []"[] будет []-eq 0[], но не []== 0[].[

].
7
27.01.2020, 19:42

Теги

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