Μεταβλητες 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