• [^] # Re: Quoting

    Posté par (site web personnel, Mastodon) . En réponse au journal Args parser pour shell. Évalué à 3. Dernière modification le 22 février 2024 à 00:10.

    Tu veux dire des commandes du shell comme ls, xargs ou autre qui pourraient avoir leur comportement modifié à cause de la modification de IFS ? Ça m’étonnerait (ou plutôt j’espère que non ^^)

    Notre exemple initial montre que l’une des passes d’interprétation de la ligne de commandes n’est pas impactée... Le shell va utiliser les blancs horizontaux pour faire sa liste de tokens.

    Une autre des passes (je présume que ça se fait en plusieurs fois mais ce n’est pas obligatoire, juste qu’il y a les divers aspects à distinguer) va aussi faire une liste de tokens mais en faisant intervenir IFS : comparé au cas précédent, la liste de caractères de séparation n’est plus en dur. Je crois bien (à vérifier) que c’est toujours le cas pour les « expansions » (donc ça va impacter la compréhension de ton $@ par exemple, la liste passée au for...in, etc.)

    Exemples marrants (ou pas) qui, j’espère, montrent bien ces deux aspects

    # celui-ci est sioux
    echo $(IFS=:; echo $PATH)
    c=0
    for i in $(IFS=:; echo $PATH); do
     c=$((c+1))
     echo "$c: $i"
    done
    var="tic,tac,toe"
    # pour bash
    IFS="," read -r -a array <<< "$var"
    # pour ksh
    IFS="," read -r -A array <<< "$var"

    "It is seldom that liberty of any kind is lost all at once." ― David Hume