Дополнительный символ перед сравнением строк

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

1
04.11.2020, 00:03
3 ответа

Вы увидите это для защиты от возможности сброса переменной. Рассмотрим, например:

if [ $x = "hi" ]; then echo $x; fi

Если для параметра xустановлено значение hi, поведение будет следующим:

$ if [ $x = "hi" ]; then echo $x; fi
hi
$

Однако, если xне установлено, вы получите сообщение об ошибке, потому что слева от=:

ничего нет.
$ if [ $x = "hi" ]; then echo $x; fi
zsh: parse error: condition expected: =

Добавление кавычек решает проблему:

$ if [ "$x" = "hi" ]; then echo $x; fi
$

Кроме того, добавление некоторого не -пустого значения решает проблему:

$ if [ x$x = "xhi" ]; then echo $x; fi
$ x=hi
$ if [ x$x = "xhi" ]; then echo $x; fi
hi
$
3
18.03.2021, 22:52

Вы, наверное, видели это без кавычек, например[ x$VAR = xstring ]

Если по какой-то причине VAR не был определен, то он ни во что не расширится, и интерпретатор скрипта выдаст ошибку вида -bash: [: =: unary operator expected. (То есть переводчик увидит [ = string ]и протестует против этого. )Добавляя дополнительный символ с обеих сторон, вы гарантируете, что «ничего» будет «чем-то», и тем не менее =останется в силе. Однако с кавычками вы не получите такой ошибки, но многие люди просто добавляют лишний символ --по привычке и не обращают особого внимания на кавычки.

1
18.03.2021, 22:52

Это делается для того, чтобы строка не была пустой, даже если $VARIABLEпуста. Конструкция bash

if [  $var = Y ]

ведет себя неправильно, если $varравно "".

0
18.03.2021, 22:52

Теги

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