Evitar a expansão glob em foo = “*”; echo $ foo [duplicado]

3

No Bash, quando faço:

foo="*"
echo $foo

Expande * para o conteúdo da pasta atual. Como posso ter certeza que apenas imprime um literal * ?

O mesmo acontece com um echo "$foo" regular, imprime o conteúdo da pasta atual.

    
por Amelio Vazquez-Reina 21.04.2015 / 00:18

1 resposta

9

Deixe-nos definir foo :

$ foo="*"

Agora, tente o eco sem aspas:

$ echo $foo
File1 File2

A substituição de * por uma lista de nomes de arquivos é chamada expansão do nome do caminho . Pode ser suprimido com aspas duplas:

$ echo "$foo"
*

Além disso, as aspas duplas impedirão a expansão de cinta , expansão de til e divisão de palavras .

Para completar, tente fazer echo com aspas simples:

$ echo '$foo'
$foo

As aspas simples impedem que o shell faça quaisquer substituições.

    
por 21.04.2015 / 00:26