Описание логических операторов в сценарии bash [дубликат]

cd .config/octave

sudo chown $USER qt-settings
16
09.03.2019, 20:42
2 ответа

Otras respuestas le dieron una solución, pero explicaré qué estaba mal con el pensamiento original.

Las variables Bash no tienen tipos, por lo que no existe una variable booleana o un valor como verdadero o falso. Básicamente, todas las variables bash son solo cadenas.

Cuando prueba una variable/cadena en bash sin especificar el tipo de prueba(-no -z), por defecto será una prueba de cadena-n(de longitud distinta de cero ).

Entonces [ "$var" ]es equivalente a [ -n "$var" ]. Siempre que $varcontenga al menos 1 carácter, se evaluará como verdadero.

Como negaste la expresión, [ ! "$var" ]es equivalente a [ ! -n "$var" ]. Entonces, si $varcontiene al menos 1 carácter, entonces la expresión es falsa.

Comofalse(que es solo una cadena )contiene 5 caracteres, la expresión es falsa. Si no importa qué cadena establezca phone_missingen (true, 0, 1 ), la expresión siempre será falseporque phone_missingtiene una longitud distinta de cero. La única forma de hacerlo truees phone_missing=""ya que tiene una longitud cero.

5
27.01.2020, 19:48

Не используйте строку для логического значения. Используйте целое число.

Вход:

val=1
((val)) && echo "true" || echo "false"
val=0
((val)) && echo "true" || echo "false"

Выход:

true
false

Источник:

((expression))

The expression is evaluated according to the rules described below under ARITHMETIC EVALUATION. If the value of the expression is non-zero, the return status is 0; otherwise the return status is 1. This is exactly equivalent to let "expression".

7
27.01.2020, 19:48

Теги

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