
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.