Μεταβλητες bash ως εντολες και κενά

Giorgos Keramidas keramida at ceid.upatras.gr
Wed Nov 7 18:23:01 EET 2007


On 2007-11-07 17:36, basOS G <noxelia at gmail.com> wrote:
> Πειραματιζομενος με το bash βρεθηκα στο εξης προβλημα.
> Εχω ορισει καποιες εντολες σαν μεταβλητες για να μπορω να τις εφαρμόζω ως
> φιλτρο πολλές φορες ως εξης :
> FPING="sed -n 2p"
> Οποτε π.χ. αν θελω να παρω τις δυο πρωτες γραμμες του ping τρεχω
> ping www.xxx.xxx | $FPING
>
> Το προβλημα εμφανιζεται σε πολυπλοκοτερες εντολες οι οποίες πρεπει να
> περιεχουν κενο
> π.χ.  FHIG="sed 's/\(foo\)/a \1 b/'"
> δίνει sed: -e expression #1, char 1: unknown command: `''
> και το FHIG="sed s/\(foo\)/a \1 b/"  (δηλαδη χωρις τα μονα ' )
> δίνει sed: -e expression #1, char 33: unterminated `s' command
>
> Μπορεί στο sed s να υπαρχει και το x20 για το space αλλα σε αλλες εντολες
> χρειαζεται πραγματικο κενό..

Τα πρώτα τρία πράγματα που σκέφτομαι εγώ είναι:

    1. ``Ξανασκέψου λίγο το "design" σου, και χρησιμοποίησε shell
       functions αντί για "expansible variables".''

    2. Καλώς ήρθες στον όμορφο κόσμο του Κόλασης των Quotes.  Μην
       κάτσεις πολύ όμως, κάνει κακό στην υγεία· την ψυχική κυρίως.

    3. Γράψε σε Perl, έλεος.

    4. Ξέχνα την Perl... Γράψε σε Python, έλεος.

Ένα παράδειγμα από το (1) είναι:

    $ cat -n kot
         1  #!/bin/sh
         2
         3  wrapfoo()
         4  {
         5          sed -e 's/\(foo\)/a \1 b/g'
         6  }
         7
         8  stripfoo()
         9  {
        10          expand | sed -e 's/[ ]*foo[ ]*//g'
        11  }
        12
        13  echo hello foo world | wrapfoo
        14  echo hello foo world | stripfoo
    $ sh kot
    hello a foo b world
    helloworld
    $




More information about the Linux-greek-users mailing list