this bash one-liner is beyond me

Giorgos Keramidas keramida at ceid.upatras.gr
Wed Jan 11 18:01:44 EET 2006


On 2006-01-11 17:53, "Nick Demou (enLogic)" <ndemou at enlogic.gr> wrote:
> >Το > redirection δεν κάνει αυτό που ελπίζει αυτός να κάνει, δηλαδή να
> >στείλει το output της tee ως stdin στην εντολή που υπάρχει ανάμεσα από
> >τα ( ... ).  Στην προσπάθεια να αποφύγει να φτιάξει `temporary file'
> >κατέληξε σε μια μπούρδα και μισή.
>
> αλήθεια τι υποτίθεται ότι κάνουν οι παρενθέσεις στο bash? έψαξα σε ένα
> βιβλίο που έχω και δεν βρήκα κάτι.

Ενεργοποιούν ένα νέο 'environment'.  Ετσι οι μεταβλητές που ορίζονται
μέσα στις παρενθέσεις δεν επηρεάζουν το τρέχον shell.  Για παράδειγμα:

    keramida at flame:/home/keramida$ cat -n /tmp/foo.sh
         1  #!/bin/sh
         2
         3  alpha=a
         4  beta=b
         5
         6  export alpha
         7
         8  ( beta=beta ; echo $alpha $beta )
         9  echo $alpha $beta
        10
        11  { beta=beta ; echo $alpha $beta ; }
        12  echo $alpha $beta
    keramida at flame:/home/keramida$ /tmp/foo.sh
    a beta
    a b
    a beta
    a beta
    keramida at flame:/home/keramida$

Η πρώτη αλλαγή του $beta, μέσα στις παρενθέσεις δεν είναι ορατή μετά το
τέλος των εντολών που έτρεξαν στο αρχικό shell.  Αντίθετα οι εντολές
στις αγκύλες επηρεάζουν την "εξωτερική" τιμή του $beta.

Η περιγραφή των 'grouping commands' υπάρχει online στο Single UNIX
Specification v.3, στο τμήμα που περιγράφει το 'standard shell':

http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_09_04_01






More information about the Linux-greek-users mailing list