
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 i
nã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"x
compara 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 $i
corresponde a um arquivo normal (ou um link simbólico para um arquivo normal). Este teste é então negado com !
. É -o
uma forma antiquada e obsoleta de dizer "OU lógico".
Os "$i"x = "$MTR"x
testes, de uma forma um tanto estranha que pode ter sido necessária em implementações muito antigas do sh
shell, se $i
e $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 $i
for a mesma string $MTR
e se referir a um arquivo regular existente (ou um link simbólico para um), ou se $i
não for o nome de um arquivo.
Talvez seja mais interessante analisar o que significa esta afirmação serfalso. Só é falso se $i
e $MTR
não for a mesma stringe $i
refere-se a um arquivo existente.