• [^] # Re: autres langages ?

    Posté par . En réponse au journal Shebang #!/usr/bin/env sh : testé et approuvé. Évalué à 3.

    Suite à ton exemple d’utilisation d’eval, je ne résiste pas au plaisir malsain de partager ce bout de code :

    # get archive-specific value for a given variable name, or use default value
    # USAGE: use_archive_specific_value $var_name
    use_archive_specific_value() {
     [ -n "$ARCHIVE" ] || return 0
     testvar "$ARCHIVE" 'ARCHIVE' || liberror 'ARCHIVE' 'use_archive_specific_value'
     local name_real
     name_real="1ドル"
     local name
     name="${name_real}_${ARCHIVE#ARCHIVE_}"
     local value
     while [ "$name" != "$name_real" ]; do
     value="$(get_value "$name")"
     if [ -n "$value" ]; then
     export ${name_real?}="$value"
     return 0
     fi
     name="${name%_*}"
     done
    }
    # get package-specific value for a given variable name, or use default value
    # USAGE: use_package_specific_value $var_name
    use_package_specific_value() {
     [ -n "$PKG" ] || return 0
     testvar "$PKG" 'PKG' || liberror 'PKG' 'use_package_specific_value'
     local name_real
     name_real="1ドル"
     local name
     name="${name_real}_${PKG#PKG_}"
     local value
     while [ "$name" != "$name_real" ]; do
     value="$(get_value "$name")"
     if [ -n "$value" ]; then
     export ${name_real?}="$value"
     return 0
     fi
     name="${name%_*}"
     done
    }

    PS : Je sais que local n’est pas POSIX, je l’utilise quand même parce que dans les faits tous les interpréteurs que j’ai testé savent l’utiliser et qu’il est trop pratique pour s’en passer sans méchamment compliquer beaucoup de choses.