Fonctionnalités et améliorations de Bash 5.2

Fonctionnalités et améliorations de la version 5.2 de Bash avec exemples pratiques. À utiliser lorsque vous travaillez avec les fonctionnalités de Bash 5.2, les améliorations de gestion des variables, les améliorations de Readline, ou lorsque l'utilisateur pose des questions sur les changements, nouvelles fonctionnalités ou capacités spécifiques à cette version.

Qu'est-ce que Fonctionnalités et améliorations de Bash 5.2 ?

Cette compétence détaille les fonctionnalités apportées par Bash 5.2 (sortie en septembre 2022) : améliorations de la gestion des variables (meilleurs messages d'erreur, comportement plus cohérent avec `readonly` et `set -u`), intégration de Readline 8.2 (complétion et historique améliorés), et avancées notables sur les tableaux indexés et associatifs (découpage, traitement par lots). Elle fournit également des exemples concrets de code, des notes de sécurité, des améliorations de performance, et des conseils de migration depuis Bash 5.1. Cette ressource est utile pour tout développeur utilisant Bash 5.2 ou souhaitant comprendre les nouveautés de cette version.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Jamie-BitFlight/claude_skills/tree/main/plugins/bash-development/skills/bash-52-features

Installed? Explore more Développement et programmation skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Que fait Fonctionnalités et améliorations de Bash 5.2 ?

Sortie en septembre 2022, Bash 5.2 apporte des améliorations à la gestion des variables, à l'intégration de Readline, à la prise en charge des tableaux et de nombreuses corrections de bogues.

Améliorations de la gestion des variables

Amélioration du comportement des variables en lecture seule et non définies

Meilleurs messages d'erreur et comportement plus cohérent :

# Messages d'erreur plus informatifs pour les variables en lecture seule
readonly CONFIG_PATH="/etc/app/config"

# Tentative de modification génère une erreur plus claire
CONFIG_PATH="/tmp/config"  # bash: CONFIG_PATH: variable en lecture seule

# Meilleure gestion des variables non définies avec set -u
set -u

# Vérification avant utilisation désormais plus fiable
if [[ -n "${OPTIONAL_VAR:-}" ]]; then
    echo "La variable est définie : ${OPTIONAL_VAR}"
else
    echo "La variable n'est pas définie"
fi

# Exemple pratique : Validation de configuration
validate_config() {
    local -a required_vars=("DATABASE_URL" "API_KEY" "LOG_DIR")
    local var

    for var in "${required_vars[@]}"; do
        if [[ -z "${!var:-}" ]]; then
            printf 'Erreur : La variable requise %s n'est pas définie\n' "${var}" >&2
            return 1
        fi
    done

    echo "Toutes les variables de configuration requises sont définies"
}

export DATABASE_URL="postgres://localhost/db"
export API_KEY="secret123"
export LOG_DIR="/var/log/app"

validate_config

Améliorations des namerefs

Gestion améliorée des variables de référence.

Exemples de code

Intégration de Readline 8.2

Améliorations significatives de l'édition en ligne de commande :

Complétion et historique améliorés

# Meilleur comportement de complétion dans ~/.inputrc
# Ignorer les complétions pour les caractères invisibles
set skip-completed-text on

# Recherche d'historique améliorée
# Parcourir l'historique avec correspondance de préfixe
bind '"\e[A": history-search-backward'  # Flèche haut
bind '"\e[B": history-search-forward'   # Flèche bas

# Coloration améliorée de la complétion
set colored-stats on
set colored-completion-prefix on

# Meilleure gestion des complétions longues
set completion-display-width 0  # Utiliser toute la largeur du terminal

Améliorations de la gestion des entrées

Exemples de code

Améliorations de la prise en charge des tableaux

Meilleures opérations sur les tableaux indexés

# Découpage et expansion améliorés des tableaux
array=(10 20 30 40 50 60 70 80 90)

# La notation de tranche est plus fiable
echo "Premiers 3 : ${array[@]:0:3}"      # 10 20 30
echo "Derniers 3 : ${array[@]: -3}"       # 70 80 90
echo "Milieu : ${array[@]:3:3}"       # 40 50 60

# Exemple pratique : Traitement par lots
process_batch() {
    local -a items=("$@")
    local batch_size=3
    local i

    for ((i = 0; i < ${#items[@]}; i += batch_size)); do
        local -a batch=("${items[@]:i:batch_size}")
        printf 'Traitement du lot %d : %s\n' \
            "$((i / batch_size + 1))" \
            "${batch[*]}"

        # Traiter les éléments du lot...
        for item in "${batch[@]}"; do
            echo "  Traitement : ${item}"
        done
    done
}

files=(fichier1 fichier2 fichier3 fichier4 fichier5 fichier6 fichier7)
process_batch "${files[@]}"

Améliorations des tableaux associatifs

Exemples de code

Améliorations de l'expansion des paramètres

Correspondance de motifs améliorée

Exemples de code

Opérations sur les sous-chaînes améliorées

Exemples de code

Corrections de sécurité

Bash 5.2 inclut plusieurs corrections liées à la sécurité :

  • Gestion améliorée de l'héritage des variables d'environnement
  • Meilleure validation des noms de variables
  • Protection renforcée contre l'injection de commandes dans certains contextes

Exemples de code

Améliorations des performances

  • Expansion plus rapide des variables dans des scénarios complexes
  • Opérations optimisées pour les grands tableaux
  • Empreinte mémoire réduite pour les tableaux associatifs
  • Efficacité améliorée dans la correspondance de motifs
# Exemple de benchmark montrant les performances améliorées
benchmark_arrays() {
    local -a array
    local i
    local start end

    start="${EPOCHREALTIME}"

    # Les opérations sur de grands tableaux sont plus rapides dans 5.2
    for ((i = 0; i < 10000; i++)); do
        array+=("item_${i}")
    done

    end="${EPOCHREALTIME}"

    printf 'Temps de remplissage du tableau : %.4f secondes\n' \
        "$(awk "BEGIN {print ${end} - ${start}}")"

    echo "Taille du tableau : ${#array[@]}"
}

benchmark_arrays

Notes de compatibilité

Mise à niveau depuis Bash 5.1

Généralement rétrocompatible, mais à noter :

  • Certains cas particuliers dans l'expansion des variables ont changé de comportement
  • Les messages d'erreur sont plus détaillés (peuvent affecter les scripts qui analysent stderr)
  • Les changements de comportement de Readline peuvent affecter les scripts interactifs

Vérification de version

# Vérifier la présence des fonctionnalités de Bash 5.2
if [[ "${BASH_VERSINFO[0]}" -eq 5 ]] && [[ "${BASH_VERSINFO[1]}" -ge 2 ]]; then
    echo "Fonctionnalités Bash 5.2+ disponibles"
    # Utiliser les fonctionnalités améliorées
elif [[ "${BASH_VERSINFO[0]}" -ge 6 ]]; then
    echo "Bash 6.0+ détecté"
else
    echo "Version de Bash trop ancienne pour les fonctionnalités 5.2"
fi

Conseils de migration

Depuis Bash 5.1 vers 5.2

La plupart des scripts fonctionnent sans modification, mais considérez :

Exemples de code

Références

Ressources supplémentaires

Pour des modèles et bonnes pratiques de développement Bash plus larges, voir :

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

Jamie-BitFlight/agentskill-kaizen-meta-docs

Agentskill kaizen plugin documentation index. Load when needing to read about cross-platform notes, improvement plans, or DuckDB integration.

Jamie-BitFlight/bash-51-features

Bash 5.1 release features and improvements with practical examples. Use when working with Bash 5.1 features, epoch time variables, redirection enhancements, or when user asks about Bash 5.1 changes, new features, or version-specific capabilities.

Jamie-BitFlight/bash-53-features

Bash 5.3 release features and improvements with practical examples. Use when working with Bash 5.3 features, new command substitution, GLOBSORT, loadable builtins, or when user asks about Bash 5.3 changes, new features, or version-specific capabilities.

Jamie-BitFlight/bash-development

This skill should be used when the user asks to "write a bash script", "create a shell script", "implement bash function", "parse arguments in bash", "handle errors in bash", or mentions bash development, shell scripting, script templates, or modern bash patterns.

Jamie-BitFlight/bash-lint

This skill should be used when the user asks to "lint bash script", "run shellcheck", "format shell script", "use shfmt", "fix shellcheck errors", or mentions shell script linting, formatting, code quality, or pre-commit hooks for bash.

Jamie-BitFlight/bash-logging

This skill should be used when the user asks to "add logging to bash script", "colorize output", "implement log levels", "CI/CD sections", "terminal colors in bash", or mentions logging functions, emoji output, collapsible CI sections, or shlocksmith.

Jamie-BitFlight/bash-portability

This skill should be used when the user asks about "POSIX compatibility", "portable shell scripts", "cross-shell compatibility", "bashisms", "shebang selection", or mentions writing scripts that work on different shells (bash, sh, dash, zsh) or different systems.

Jamie-BitFlight/bash-testing

This skill should be used when the user asks to "test bash script", "write shell tests", "use shunit2", "use shellspec", "create test suite for bash", or mentions unit testing, test frameworks, mocking, or test-driven development for shell scripts.

Jamie-BitFlight/brainstorming-skill

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or when users request help with ideation, marketing, and strategic planning. Explores user intent, requirements, and design before implementation using research-validated prompt patterns.

Jamie-BitFlight/clang-format

Configure clang-format code formatting. Use when: user mentions clang-format or .clang-format, analyzing code style/patterns, creating/modifying formatting config, troubleshooting formatting, brace styles/indentation/spacing/alignment/pointer alignment, or codifying conventions.

Jamie-BitFlight/commitlint

When setting up commit message validation for a project. When project has commitlint.config.js or .commitlintrc files. When configuring CI/CD to enforce commit format. When extracting commit rules for LLM prompt generation. When debugging commit message rejection errors.

Jamie-BitFlight/conventional-commits

When writing a git commit message. When task completes and changes need committing. When project uses semantic-release, commitizen, git-cliff. When choosing between feat/fix/chore/docs types. When indicating breaking changes. When generating changelogs from commit history.

Jamie-BitFlight/dasel-reference

Use when querying, modifying, or converting JSON, YAML, TOML, XML, CSV, HCL, or INI with dasel v3. Complete reference for selectors, functions, conditionals, variables, spread operator, type casting, and format-specific patterns.

Jamie-BitFlight/data-exploration

Use when exploring unknown structured data files with dasel v3 — discover schema, list keys, find nested values, sample arrays, identify data types across JSON, YAML, TOML, XML, CSV, HCL, INI formats

Jamie-BitFlight/data-transformation

Use when modifying, converting, or transforming structured data with dasel v3 — in-place mutations, format conversion, batch operations, array manipulation, object construction, and merge patterns across JSON, YAML, TOML, XML, CSV, HCL, INI

Jamie-BitFlight/delegate

Decompose substantive work into phases, dispatch each phase to a sub-agent, and adjudicate what comes back. Use whenever a request asks for implementation, investigation, a fix, a review, or any change to files — including small ones — and whenever you are about to read source or run a diagnostic yourself instead of handing it off. Also use when a report from a sub-agent needs judging, when a phase needs re-dispatching, or when a user names one instance of a pattern. Does not apply when your own prompt begins "Your ROLE_TYPE is sub-agent." — then follow references/sub-agent-contract.md instead.

Jamie-BitFlight/enterprise-hibernate-hbm

Dasel v3 query patterns for Hibernate .hbm.xml mapping files — entity-table binding, Java property-to-column extraction, one-to-many set/list/bag relationship tracing, many-to-one foreign key discovery, batch scanning across 60+ HBM files. Use when querying Hibernate ORM class mappings, extracting schema metadata from Java persistence layer, or auditing entity-column relationships in enterprise legacy codebases.

Jamie-BitFlight/enterprise-installanywhere

Dasel v3 query patterns for InstallAnywhere .iap_xml installer definitions — use when querying action sequences, discovering variables, resolving platform conditions, navigating panels, or comparing installer variants. Files are 2.5+ MB, 65,000+ lines — too large for context reads, requires structural dasel queries.

Jamie-BitFlight/enterprise-maven-pom

Dasel v3 selector patterns for Maven POM XML files — use when querying dependency versions, filtering by groupId or scope, extracting module hierarchy from parent POMs, or detecting version conflicts across enterprise multi-module Java projects. Load this skill when working with pom.xml files using dasel.

Jamie-BitFlight/enterprise-spring-xml

Dasel v3 selectors for Spring bean factory XML — use when querying any Spring ApplicationContext XML for bean discovery, dependency wiring, JMS destination mapping, property injection extraction, or cross-bean reference tracing. Load this skill before writing dasel selectors against Spring bean XML files (applicationContext.xml, *_beans.xml, spring-*.xml).

Skills associés