Quando as cadeias arbitrárias são passadas para teste ambíguo

2

Eu me deparei com essa construção para testar se a variável de shell $foo , que poderia conter qualquer string arbitrária, correspondia a foo :

[ "x$foo" = "xfoo" ]

O objetivo de prefixar com x nunca foi explicado. Isso parece uma tentativa de evitar erros que podem surgir quando $foo contém strings especiais para testar como = , -f , ( ou ! . O manual de informações do GNU indica que expressões compostas envolvendo -a e -o podem levar a ambigüidade, então estou principalmente interessado em instruções simples (ou seja, não compostas). Eu tive dificuldade em procurar mais informações sobre isso. Eu não fui capaz de inventar um exemplo de uma string arbitrária que fez com que o GNU test falhasse de uma maneira inesperada, embora eu admita que não sou tão inteligente assim.

Minhas perguntas:

  1. Quais motivos existem para substituir as substituições de parâmetro em test ?
  2. Existe um exemplo de uma declaração simples (ou seja, não composta) envolvendo substituição de parâmetro ingênuo (ou seja, sem proteção de prefixo) que faz com que test dê resultados incomuns?

Eu uso principalmente ferramentas GNU no linux, mas por uma questão de portabilidade, estou interessado em saber se test também está em outras plataformas.

    
por ov2k 19.09.2017 / 21:32

1 resposta

1

> [ -f = -a -a -a ]
bash: [: argument expected

> [ -f = -a -a x ]

Mas:

[ x-f = x-a -a -a ]

não funciona, embora

[ -a ]

está bem.

    
por 19.09.2017 / 21:42

Tags