Community程式設計與開發github.com

Jamie-BitFlight/bash-52-features

Bash 5.2 版的新功能與改進,包含實用的程式碼範例。適合在處理 Bash 5.2 功能、變數處理增強、readline 改進,或使用者詢問 Bash 5.2 變更、新功能、版本特定能力時使用。

bash-52-features 是什麼?

這個技能主要說明 Bash 5.2(2022 年 9 月發布)帶來的新功能與改進。它涵蓋了變數處理、readline 整合、陣列支援與參數展開等各方面的重要增強,並輔以大量的 Shell 腳本範例,幫助開發者快速掌握並應用這些新特性。技能中也包含安全性修正、效能優化、版本相容性檢查與遷移建議,確保使用者在升級或撰寫新腳本時能夠順利融入 Bash 5.2 的變化。無論是在 Claude Code、Cursor 或 Codex 等 AI 代理平台上,本技能都能提供清晰指引,協助開發者利用最新的 Bash 功能來提升腳本效率與可靠性。

相容平台✓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 程式設計與開發 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

Bash 5.2 功能與改進

2022 年 9 月發布的 Bash 5.2,在變數處理、readline 整合、陣列支援等方面進行了強化,並修正了多項錯誤。

變數處理增強

唯讀與未設定變數行為改進

更完善的錯誤訊息與更一致的行為:

# 唯讀變數顯示更詳細的錯誤訊息
readonly CONFIG_PATH="/etc/app/config"

# 嘗試修改時會顯示更清晰的錯誤
CONFIG_PATH="/tmp/config"  # bash: CONFIG_PATH: 唯讀變數

# 在 set -u 模式下,對未設定變數的處理更可靠
set -u

# 使用前檢查變數是否已設定
if [[ -n "${OPTIONAL_VAR:-}" ]]; then
    echo "變數已設定: ${OPTIONAL_VAR}"
else
    echo "變數未設定"
fi

# 實戰範例:設定檔驗證
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 '錯誤:必要變數 %s 未設定\n' "${var}" >&2
            return 1
        fi
    done

    echo "所有必要的設定檔變數均已設定"
}

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

validate_config

Nameref 改進

增強了參考變數的處理方式。

程式碼範例

Readline 8.2 整合

命令列編輯功能顯著改進:

強化補全與歷史紀錄

# 在 ~/.inputrc 中設定更好的補全行為
# 跳過不可見字元的補全
set skip-completed-text on

# 強化歷史搜尋
# 使用前綴比對循環瀏覽歷史
bind '"\e[A": history-search-backward'  # 上箭頭
bind '"\e[B": history-search-forward'   # 下箭頭

# 改進補全色彩
set colored-stats on
set colored-completion-prefix on

# 長補全項目的處理最佳化
set completion-display-width 0  # 使用完整終端機寬度

輸入處理改進

程式碼範例

陣列支援增強

更好的索引陣列操作

# 更可靠的陣列切片與展開
array=(10 20 30 40 50 60 70 80 90)

# 切片語法更加穩定
echo "前三個: ${array[@]:0:3}"      # 10 20 30
echo "後三個: ${array[@]: -3}"       # 70 80 90
echo "中間三個: ${array[@]:3:3}"     # 40 50 60

# 實戰範例:批次處理
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 '處理第 %d 批: %s\n' \
            "$((i / batch_size + 1))" \
            "${batch[*]}"

        # 處理批次中的項目...
        for item in "${batch[@]}"; do
            echo "  處理中: ${item}"
        done
    done
}

files=(file1 file2 file3 file4 file5 file6 file7)
process_batch "${files[@]}"

關聯陣列改進

程式碼範例

參數展開增強

改善的模式比對

程式碼範例

增強的 substring 操作

程式碼範例

安全性修正

Bash 5.2 包含多項安全性相關修正:

  • 改善環境變數繼承的處理
  • 更好的變數名稱驗證
  • 在特定情境下增強對命令注入的防護

程式碼範例

效能改進

  • 複雜變數展開時速度更快
  • 大型陣列操作已最佳化
  • 關聯陣列的記憶體佔用降低
  • 模式比對效率提升
# 效能基準測試範例,展示改善效果
benchmark_arrays() {
    local -a array
    local i
    local start end

    start="${EPOCHREALTIME}"

    # 5.2 版中大型陣列操作更快速
    for ((i = 0; i < 10000; i++)); do
        array+=("item_${i}")
    done

    end="${EPOCHREALTIME}"

    printf '陣列填充時間: %.4f 秒\n' \
        "$(awk "BEGIN {print ${end} - ${start}}")"

    echo "陣列大小: ${#array[@]}"
}

benchmark_arrays

相容性注意事項

從 Bash 5.1 升級

大致上向下相容,但請注意:

  • 變數展開的某些邊界情況行為已改變
  • 錯誤訊息更加詳細(可能影響解析 stderr 的腳本)
  • Readline 行為變更可能影響互動式腳本

版本檢查

# 檢查是否支援 Bash 5.2 功能
if [[ "${BASH_VERSINFO[0]}" -eq 5 ]] && [[ "${BASH_VERSINFO[1]}" -ge 2 ]]; then
    echo "可使用 Bash 5.2+ 功能"
    # 使用增強的語法
elif [[ "${BASH_VERSINFO[0]}" -ge 6 ]]; then
    echo "偵測到 Bash 6.0+"
else
    echo "Bash 版本過舊,不支援 5.2 功能"
fi

遷移建議

從 Bash 5.1 遷移到 5.2

大多數腳本無需修改即可運作,但建議考慮:

程式碼範例

參考資料

其他資源

關於更廣泛的 Bash 開發模式與最佳實務,請參考:

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).

相關技能