Shell,bash,linux; após a declaração da variável, por que ponto e vírgula e o que ele faz?

Shell,bash,linux; após a declaração da variável, por que ponto e vírgula e o que ele faz?

Aqui está a linha.

    variable=`ls -A $1 | grep '[abc]'; ls -1 $1`

Entendo a linha antes do ponto e vírgula, mas não entendo como essa linha funciona depois do ponto e vírgula. Será que isso

  after the command(variable assignment) 
  and then run the command after semi-colon?

Então a seguinte linha seria a mesma?

    variable=`ls -A $1 | grep '[abc]' | ls -1 $1`

Obrigado,

Responder1

o ponto e vírgula simplesmente separa dois comandos consecutivos. a página de manual ( man bash) diz (no capítuloListas):

Comandos separados por um ; são executados sequencialmente

por exemplo, o seguinte preenchimento, primeiro execute o comando fooe depois o comando bar.

foo; bar

para analisar seu exemplo corretamente, primeiro você precisa construir um modelo hierárquico dele:

 variable=`ls -A $1 | grep '[abc]'; ls -1 $1`

pode ser dividido em (algo dentro de crases) e (a coisa dentro de crases).variable=...ls -A $1 | grep '[abc]'; ls -1 $1

backticks são usados ​​para obter a saída de um comando (veja oSubstituição de comandoem man bash); então você está atribuindo a saída inteira ls -A $1 | grep '[abc]'; ls -1 $1à variável.

a saída do comando substituído é a lista de arquivos que correspondem a um determinado padrão (incluindo hildes ocultos) anexada à lista completa de arquivos (para qualquer coisa que possa ser usada ...)

Responder2

Não, eles não são iguais, o último entraria grep( lso que quase certamente não é o que você deseja). O ponto e vírgula simplesmente separa dois comandos diferentes.

Em primeiro lugar, você provavelmente deseja começar a usar omais novo e mais flexível $( ... )em vez do backtick.

Tome isto como exemplo:

$ var=`echo foo; echo bar`
$ echo "$var"
foo
bar

Você pode pensar nos backticks (ou $( ... )) como retornando tudo o que foi impresso na saída padrão durante a execução do código contido entre eles.

No seu caso, ele analisa a saída de ls -A $1uma vez e procura uma linha em sua saída contendo a, b, ou e c, em seguida, imprime uma saída de coluna única de ls -1 $1. Em geral, isso é uma má ideia,você não deve analisar ls.

informação relacionada