在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
相关产品推荐
相关产品推荐

