Como construir um comando grep com um argumento variável no bash?

Como construir um comando grep com um argumento variável no bash?

Estou tentando fazer algo assim no bash:

grep ( date | awk '{print "2006-" $6}' ) /some/file/here

Mas essa sintaxe está incorreta.

O objetivo é grep /some/file/here para o padrão 2006-2011, onde 2011 é o ano atual.

Responder1

grep "$(date | awk '{print "2006-" $6}')" /some/file/here

"..."mantém seu conteúdo como um argumento (mesmo se houver espaços em branco).

$(...)é para "substituição de comando", onde o stdout da execução do comando incorporado será colocado em vigor na linha de comando original. (Outra sintaxe, `...`, também é comum, mas muito mais difícil de aninhar.)

Mais fácil:

grep "$(date +'2006-%Y')" /some/file/here

Aqui, você usa a capacidade da data para formatar a saída arbitrariamente.

Observe que nenhum deles corresponde a nenhum ano no intervalo 2006-2011; eles correspondem à string literal "2006-2011". Se você quiser igualar qualquer um dos anos, avise-nos.

informação relacionada