Shell, bash, linux; Después de la declaración de variable, ¿por qué punto y coma y qué hace?

Shell, bash, linux; Después de la declaración de variable, ¿por qué punto y coma y qué hace?

Aquí está la línea.

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

Entiendo la línea antes del punto y coma pero no entiendo cómo funciona esta línea después del punto y coma. Lo hace

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

¿Entonces la siguiente línea sería la misma?

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

Gracias,

Respuesta1

el punto y coma simplemente separa dos comandos consecutivos. la página de manual ( man bash) dice (en el capítuloLiza):

Comandos separados por ; se ejecutan secuencialmente

Por ejemplo, el siguiente relleno ejecuta primero el comando fooy luego el comando bar.

foo; bar

Para analizar su ejemplo correctamente, primero debe crear un modelo jerárquico del mismo:

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

se puede dividir en (algo dentro de comillas invertidas) y (lo que está dentro de comillas invertidas).variable=...ls -A $1 | grep '[abc]'; ls -1 $1

se utilizan comillas invertidas para obtener el resultado de un comando (consulte laSustitución de mandoen man bash); entonces estás asignando la salida del todo ls -A $1 | grep '[abc]'; ls -1 $1a la variable.

el resultado del comando sustituido es la lista de archivos que coinciden con un determinado patrón (incluidos los hildes ocultos) junto con la lista completa de archivos (para cualquier cosa que pueda usarse...)

Respuesta2

No, no son lo mismo, este último se conectaría grep( lsque es casi seguro que no es lo que quieres). El punto y coma simplemente separa dos comandos diferentes.

En primer lugar, probablemente quieras empezar a utilizar elmás nuevo, más flexible $( ... )en lugar de la comillas invertidas.

Toma esto como un ejemplo:

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

Puede pensar que las comillas invertidas (o $( ... )) devuelven lo que se imprimió en la salida estándar durante la ejecución del código contenido entre ellas.

En su caso, mira la salida de ls -A $1once y busca una línea en su salida que contenga a, bo c, y luego imprime una salida de una sola columna de ls -1 $1. En general, esta es una mala idea,no deberías analizar ls.

información relacionada