Как предотвратить изменение версии Python по умолчанию?

В kshвстроенная функция [принимает операнды -eqкак в арифметическом контексте, точно так же, как Bash делает для [[и -eq. А в арифметическом контексте переменные не нуждаются в знаке $.

$ ksh -c 'a=1 b=1; if [ a -eq b ]; then echo equal; else echo different; fi'
equal
$ ksh -c 'a=1 b=2; if [ a -eq b ]; then echo equal; else echo different; fi'
different

или даже:

$ ksh -c 'a=2 b=8; if [ a*4 -eq b ]; then echo equal; else echo different; fi'
equal
$ ksh -c 'a=2 b=9; if [ a*4 -eq b ]; then echo equal; else echo different; fi'
different

(Тем не менее, *по-прежнему глобус, так что a*4следует указать здесь.)

Это ksh93, ksh --versionпоказывает sh (AT&T Research) 93u+ 2012-08-01, это из пакета Debian (ksh, версия пакета93u+20120801-3.1). Я получаю тот же результат с Debian mksh, поэтому я полагаю, что ksh88 здесь достаточно близок.


Для сравнения, в Bash выдает ошибку:

$ bash -c 'a=1 b=1; if [ a -eq b ]; then echo equal; else echo different; fi'
bash: line 0: [: a: integer expression expected
different

(он печатает different, так как [возвращает ложное значение при ошибке ).

С [[работает:

$ bash -c 'a=1 b=1; if [[ a -eq b ]]; then echo equal; else echo different; fi'
equal

Zsh здесь похож на Bash, [ошибок на a -eq b, [[работает.

0
14.02.2021, 21:05
0 ответов

Теги

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