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