Estritamente falando, expressão sábia, if [ x$feature_platform_search_hint = xy ]
não tem nada a ver com grub
, é uma expressão de shell, a ser interpretada pelo shell. grub
está usando em um de seus scripts de ajuda, é isso.
if [ x$feature_platform_search_hint = xy ]
é basicamente testando se a variável feature_platform_search_hint
é expandida para y
.
Como?
O [
é um sinônimo para o comando test
(pode ser um shell embutido ou um comando externo), usado para avaliar expressões.
Em if [ x$feature_platform_search_hint = xy ]
:
-
[
está testando se as stringsx$feature_platform_search_hint
exy
são iguais -
aqui
x
é um espaço reservado, string fictícia, existe em ambos os lados -
a variável
$feature_platform_search_hint
é expandida primeiro, o valor é adicionado à string já existentex
e, em seguida, a sequência à esquerda é comparada à sequência à direita de=
-
Com efeito, é necessário verificar se a variável
feature_platform_search_hint
tem valory
-
Aqui
x
é usado para que, se a variávelfeature_platform_search_hint
não estiver definida ou nula, o[
sairá com um erro, pois=
requer argumento em ambos os lados e semfeature_platform_search_hint
. tornar-se:if [ = y ]
usando
x
obtém o uso sintaticamente correto nesse caso:if [ x = xy ]
Observe que, em vez disso, deve-se usar o teste -z
(que testa se a cadeia é de comprimento zero) ou -n
teste (teste de comprimento diferente de zero), o que for mais adequado:
if [ -n "$feature_platform_search_hint" ]
if [ -z "$feature_platform_search_hint" ]
Deve-se também citar variáveis (embora estritamente desnecessário neste caso, já que presumivelmente o autor pretendia definir / sobrescrever a variável dentro do script):
if [ x"$feature_platform_search_hint" = xy ]