Comparando variáveis ​​no script

Comparando variáveis ​​no script

Eu tenho essa declaração if [ ! - f "$i" -o "$i"x = "$MTR"x]e queria saber o que ela alcança. Entendo que a primeira parte verifica se a variável inão é um arquivo, mas não consigo descobrir qual é a segunda parte depois de -o(que significa OR lógico, eu acho). Qualquer ajuda será muito útil.

Responder1

Correto, o -o significa um OR lógico.
O "$i"x = "$MTR"xcompara o conteúdo das variáveis $i​​e $MTR.
Acho que xé adicionado a ambas as variáveis ​​para evitar problemas se alguma das duas variáveis ​​não estiver definida ou não inicializada.

Responder2

Supondo que a afirmação seja

if [ ! -f "$i" -o "$i"x = "$MTR"x ]

Verifica -f "$i"se o valor $icorresponde a um arquivo normal (ou um link simbólico para um arquivo normal). Este teste é então negado com !. É -ouma forma antiquada e obsoleta de dizer "OU lógico".

Os "$i"x = "$MTR"xtestes, de uma forma um tanto estranha que pode ter sido necessária em implementações muito antigas do shshell, se $ie $MTRé a mesma string.

Em um shell padrão (atual) sh, a instrução seria escrita

if [ ! -f "$i" ] || [ "$i" = "$MTR" ]

ou, com um pouco de lógica aplicada,

if [ "$i" = "$MTR" ] && [ -f "$i" ] || [ ! -f "$i" ]

Em palavras: A afirmação é verdadeira se $ifor a mesma string $MTRe se referir a um arquivo regular existente (ou um link simbólico para um), ou se $inão for o nome de um arquivo.

Talvez seja mais interessante analisar o que significa esta afirmação serfalso. Só é falso se $ie $MTRnão for a mesma stringe $irefere-se a um arquivo existente.

informação relacionada