2012-01-08 18 views
5

El siguiente script bash enumera todos los archivos y directorios en un directorio determinado y su sub. ¿Qué significa el $1/* en el script? Por favor dame algunas referencias al respecto. Gracias

#!/bin/sh 

list_alldir(){ 
    for file in $1/* 
    do 
     if [ -d $file ]; then 
      echo $file 
      list_alldir $file 
     else 
      echo $file 
     fi 
    done 
} 

if [ $# -gt 0 ]; then 
    list_alldir "$1" 
else 
    list_alldir "." 
fi 

Respuesta

18

Es el pegote del primer argumento considerado como un directorio

En scripts bash los argumentos a un archivo se pasan en el guión como $0 (que es el nombre del script), entonces $1, $2 , $3 ... Para acceder a todos ellos, utilice su etiqueta o use uno de los constructos de grupo. Para las construcciones de grupo hay $* y [email protected]. ($* considera todos los argumentos como un bloque donde como [email protected] los considera delimitados por $IFS)

5

$1 significa que el primer parámetro.
for file in $1/* significa bucle con la variable file que tiene el valor del nombre de cada archivo en el directorio nombrado en el primer parámetro.

2

$ 1 es el primer argumento de línea de comandos. Si ejecuta ./asdf.sh a b c d e, entonces $ 1 será a, $ 2 será b, etc. En shells con funciones, $ 1 puede servir como el primer parámetro de función, y así sucesivamente.

Cuestiones relacionadas