[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Irritationen bei find und sh



Hallo Wolfgang,

* Wolfgang Werner schrieb am 13.01.2012 um 08:23 (+0100):

> Ich kenne $* nur aus shell Skripten, was mir die auf der
> Kommandozeile übergebenen Argumente zurückgibt. bei $ denk ich
> immer an Variabeln, daher meine Verwirrung.

das ist korrekt.  Wie Christian Brabandt schon erwähnt hat,
klappt das auch bei Parametern, die Funktionen übergeben werden.

Der Grund für die Ausführlichkeit meiner vorigen E-Mail ist, dass
man $* (fast) immer Ärger verursacht und man eigentlich (fast)
immer "$@" verwenden möchte.  Aber das Quoting der Shell ist als
Problemquelle ja auch so ein heiß geliebtes (Ironie!) und oft
verkanntes Thema... :-)

Nur ganz kurz:

    --------------------shelltest--------------------
    #!/bin/sh
    echo "Anzahl: $#"
    echo 'Variante $*:'
    for S in $*; do echo "===$S==="; done
    echo 'Variante "$*":'
    for S in $*; do echo "===$S==="; done
    echo 'Variante $@:'
    for S in $@; do echo "===$S==="; done
    echo 'Variante "$@":'
    for S in "$@"; do echo "===$S==="; done
    --------------------shelltest--------------------

(Auf der Kommandozeile liefern beide Befehle die gleiche Ausgabe!)

    user@hostname$ ./shelltest file1 "file2 with spaces" file3
    [...]
    user@hostname$ ./shelltest file1 file2\ with\ spaces file3
    Anzahl: 3
    Variante $*:
    ===file1===
    ===file2===
    ===with===
    ===spaces===
    ===file3===
    Variante "$*":
    ===file1===
    ===file2===
    ===with===
    ===spaces===
    ===file3===
    Variante $@:
    ===file1===
    ===file2===
    ===with===
    ===spaces===
    ===file3===
    Variante "$@":
    ===file1===
    ===file2 with spaces===
    ===file3===

Details - wie immer - unter bash(1) :-)

Grüße,
Mathias


Reply to: