Por que estou recebendo muitos argumentos?

3

Aqui está uma parte do meu script que está me dizendo que tenho muitos argumentos na linha 3:

#!/bin/bash
export LC_ALL='C'
if [ 'echo "*file 2" | grep -o ^.' = '.' ]
then
    echo success
fi

Alguém sabe por quê? Tanto quanto eu posso dizer, eu estou apenas comparando dois argumentos, "*" e "."

    
por Aaron 17.10.2014 / 01:34

1 resposta

5

echo "*file 2" | grep -o ^. imprime * .

Como você tem uma substituição de comando fora de aspas duplas, ele passa por globbing (geração de nome de arquivo a.k.a. curinga correspondente a.k.a.) e divisão de palavras. Se o diretório atual não estiver vazio, * será expandido para a lista de arquivos no diretório atual. Cada arquivo se torna um token no comando [ , o que é altamente provável que seja um erro de sintaxe.

O problema é que você não usou aspas duplas em torno da substituição de comando. Sempre use aspas duplas em torno de substituições de variáveis e comandos , a menos que você tenha um bom motivo para omiti-las.

if [ "$(echo "*file 2" | grep -o ^.)" = '.' ]

Veja Por que meu script de shell sufoca em espaço em branco ou outros caracteres especiais? para uma explicação mais detalhada.

    
por 17.10.2014 / 01:39