2016-04-10 4 views
0

Ich habe zwei Fragen.IFS und durch einzelne Positionen im Verzeichnis

  1. Ich habe folgende Codezeile in Skript gefunden: IFS=${IFS#??} Ich möchte verstehen, was es genau tut?
  2. Wenn ich versuche, etwas in jedem Ort aus dem Verzeichnis ausführen, wie zB .:

    $1 = home/user/bin/etc/something... 
    

    so muß ich IFS ändern „/“ und dann diese wie für Schleife in gehen

    while [ -e "$1" ]; do 
        for F in `$1` 
         #do something 
        done 
    shift 
    done 
    

Ist das der richtige Weg?

+2

Nicht ganz sicher, was Sie zu tun versuchen zu Frage 2. Zu Frage 1: '$ {IFS # ??}' 'nimmt zwei Zeichen von der linken Seite von' IFS' ab. Check out 'man bash' für die Parametererweiterung. Sie können auch lesen [Bash FAQ 73] (http://mywiki.wooledge.org/BashFAQ/073). –

+0

* "Ich habe zwei Fragen." * Dann posten Sie zwei getrennte Fragen, damit wir sie isoliert diskutieren und beantworten können und eine einzige Antwort als Lösung akzeptiert werden kann. Vielen Dank, – tripleee

Antwort

5

${var#??} ist ein shell parameter expansion. Es versucht den Anfang von $var mit dem Muster nach # übereinstimmen. Wenn dies der Fall ist, wird die Variable $var mit dem entfernten Teil zurückgegeben. Da ? mit einem beliebigen Zeichen übereinstimmt, bedeutet dies, dass ${var#??} die ersten beiden Zeichen aus der Variablen $var entfernt.

$ var="hello" 
$ echo ${var#??} 
llo 

So mit IFS=${IFS#??} Sie IFS auf ihren Wert zurückzusetzen, nachdem seine beiden ersten Zeichen zu entfernen.


Um eine Schleife durch die Worte in einem / separiert String, können Sie den gespaltet String in ein Array speichern und dann die Schleife durch sie:

$ IFS="/" read -r -a myarray <<< "home/user/bin/etc/something" 
$ for w in "${array[@]}"; do echo "-- $w"; done 
-- home 
-- user 
-- bin 
-- etc 
-- something 
Verwandte Themen