Shell, bash, linux: após a declaração de variáveis, por que ponto-e-vírgula e o que ele faz?

0

Aqui está a linha.

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

Eu entendo a linha antes do ponto-e-vírgula, mas não entendo como essa linha funciona depois do ponto e vírgula. 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,

    
por EPSILONsdfsdfdsf 09.10.2013 / 09:20

2 respostas

1

Não, eles não são os mesmos, o último canalizará grep para ls (o que é quase certo que não é o que você quer). O ponto-e-vírgula simplesmente separa dois comandos diferentes.

Primeiramente, você provavelmente deseja começar a usar o mais recente e flexível $( em vez do backtick .

Considere isso como um exemplo:

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

Você pode pensar nos backticks (ou $( ) como retornando 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 $1 uma vez e procura uma linha na saída contendo a, b ou c e, em seguida, imprime uma saída de coluna única de ls -1 $1 . Em geral, isso é uma má idéia, você não deve analisar ls .

    
por 09.10.2013 / 09:37
2

o ponto-e-vírgula simplesmente separa dois comandos consecutivos. the manpage ( man bash ) diz (no capítulo Listas ):

Commands separated by a ; are executed sequentially

por exemplo. o seguinte preenchimento primeiro execute o comando foo e depois o comando bar .

foo; bar

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

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

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

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

a saída do comando substutited é a lista de arquivos que correspondem a um determinado padrão (incluindo hildes ocultos) anexados à lista completa de arquivos (o que quer que possa ser usado para ...)

    
por 09.10.2013 / 09:38