You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在sh/bash中强制对回退值进行分词处理

解决bash中回退命令被识别为单个字符串的问题

你当前的写法"${@:-ls -sh}"会把ls -sh当成一个完整的字符串参数,系统会尝试执行名为ls -sh的命令而非ls加-sh选项。可以用以下几种方式解决:

  • 数组存储回退命令
    把默认命令存进数组,展开数组时会自动拆分每个元素为独立参数:

    default=(ls -sh)
    "${@:-${default[@]}}"
    

    这种方式安全且符合bash的参数处理逻辑,适合大多数场景。

  • 条件分支直接处理
    直接判断参数数量,为空时执行默认命令,否则执行传入的命令:

    if [[ $# -eq 0 ]]; then
        ls -sh
    else
        "$@"
    fi
    

    逻辑直观,可读性强,适合简单脚本。

  • 慎用eval(不推荐)
    用eval可以解析字符串为命令,但存在安全风险(若传入的参数包含恶意代码会被执行),仅在完全可控的场景下使用:

    eval "${@:-ls -sh}"
    

内容的提问来源于stack exchange,提问作者OwnageIsMagic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 10:55:55