Por que estou recebendo "muitos argumentos"

Por que estou recebendo "muitos argumentos"

Aqui está uma parte do meu script que me diz 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ê? Pelo que sei, estou apenas comparando dois argumentos, "*" e "."

Responder1

echo "*file 2" | grep -o ^.impressões *.

Como você tem uma substituição de comando fora das aspas duplas, ela sofre globbing (também conhecido como correspondência de curinga, também conhecida como geração de nome de arquivo) e divisão de palavras. Se o diretório atual não estiver vazio, *expande para a lista de arquivos no diretório atual. Cada arquivo se torna um token no [comando, o que provavelmente é um erro de sintaxe.

O problema é que você não usou aspas duplas na substituição do comando.Sempre use aspas duplas em substituições de variáveis ​​e comandosa menos que você tenha um bom motivo para omiti-los.

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

VerPor que meu script de shell engasga com espaços em branco ou outros caracteres especiais?para uma explicação mais detalhada.

informação relacionada