• [^] # Re: Tableau

    Posté par . En réponse au journal Tu souhaites apprendre à programmer en shell. Évalué à 8. Dernière modification le 19 août 2012 à 11:45.

    "dirname" "basename", c'est tout de même beaucoup plus court et performant en bash (pas de fork pour lancer un binaire extérieur "à la con") :

    Sauf qu'il faut que tu sois sûr de la tête du chemin en argument. Exemple :

    #!/bin/sh
    echo "-- Built-in --"
    echo "dirname [${1%/*}]"
    echo "basename [${1##*/}]"
    echo ""
    echo "-- Commandes --"
    echo "dirname [$(dirname "1ドル")]"
    echo "basename [$(basename "1ドル")]"
    
    
    $ ./dir.sh ../toto/
    -- Built-in --
    dirname [../toto]
    basename []
    -- Commandes --
    dirname [..]
    basename [toto]
    $ ./dir.sh /lib 
    -- Built-in --
    dirname []
    basename [lib]
    -- Commandes --
    dirname [/]
    basename [lib]
    $ ./dir.sh /
    -- Built-in --
    dirname []
    basename []
    -- Commandes --
    dirname [/]
    basename [/]
    
    

    Si je fais la commande que j'ai montrée plus loin, dans certains cas je vais travailler dans mon ~. Si le dossier cible est censé être temporaire dans le script… ^_^'

    De plus, j'ai eu quelques surprise avec les regex internes. Je me disais aussi que c'était beaucoup plus rapide (je stockais une immense chaine avec toutes les données, dont j'éliminais/récupérais certains éléments à coup de regex), et bien non, pour les gros trucs sed semble faire du meilleur boulot.