2012-11-17 5 views
0
while read dir ev file; do 
#do stuff 
done 

La partie pour laquelle je ne trouve pas d'explication est la partie "read dir ev". Je ne suis pas familier avec bash. Je fais principalement PHP et MySQL. Quelqu'un peut-il expliquer?Script Bash, veuillez expliquer cette syntaxe

Merci.

+2

Dites 'aide read' dans votre shell. –

+0

Merci. Je regardais 'while' et je ne pensais pas à regarder' read' –

Répondre

3

La version courte est, il prend une seule ligne à la fois de l'entrée et lui assigne des champs individuels en variables.

read dir ev file lit les lignes une par une et attend que chaque ligne contienne 3 éléments. Il affecterait alors le premier élément dans une variable nommée dir, le second dans une variable nommée ev, et le troisième dans une variable nommée file.


De la sortie de help read:

(Edit: version plus lisible ici: http://ss64.com/bash/read.html)

read: read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...] 
    Read a line from the standard input and split it into fields. 

    Reads a single line from the standard input, or from file descriptor FD 
    if the -u option is supplied. The line is split into fields as with word 
    splitting, and the first word is assigned to the first NAME, the second 
    word to the second NAME, and so on, with any leftover words assigned to 
    the last NAME. Only the characters found in $IFS are recognized as word 
    delimiters. 

    If no NAMEs are supplied, the line read is stored in the REPLY variable. 

    Options: 
     -a array assign the words read to sequential indices of the array 
       variable ARRAY, starting at zero 
     -d delim continue until the first character of DELIM is read, rather 
       than newline 
     -e    use Readline to obtain the line in an interactive shell 
     -i text Use TEXT as the initial text for Readline 
     -n nchars return after reading NCHARS characters rather than waiting 
       for a newline, but honor a delimiter if fewer than NCHARS 
       characters are read before the delimiter 
     -N nchars return only after reading exactly NCHARS characters, unless 
       EOF is encountered or read times out, ignoring any delimiter 
     -p prompt output the string PROMPT without a trailing newline before 
       attempting to read 
     -r    do not allow backslashes to escape any characters 
     -s    do not echo input coming from a terminal 
     -t timeout  time out and return failure if a complete line of input is 
       not read withint TIMEOUT seconds. The value of the TMOUT 
       variable is the default timeout. TIMEOUT may be a 
       fractional number. If TIMEOUT is 0, read returns success only 
       if input is available on the specified file descriptor. The 
       exit status is greater than 128 if the timeout is exceeded 
     -u fd    read from file descriptor FD instead of the standard input 

    Exit Status: 
    The return code is zero, unless end-of-file is encountered, read times out, 
    or an invalid file descriptor is supplied as the argument to -u. 
+2

Notez le commentaire 'avec les mots restants assignés au nom'. S'il y a 6 champs sur la ligne, les deux premiers sont assignés à 'dir' et' ev' et les autres sont dans 'file'. S'il n'y a que deux champs, alors 'fichier' est vide; s'il y a un champ, alors 'ev' et' file' sont vides. –

+0

@Amber Merci, c'est génial. Je n'avais aucune idée de ce qui se passait. Copié le contenu de la boucle while depuis un autre endroit et pensé que 'ev' était une sorte de mot réservé. –

Questions connexes