如何在Bash脚本中保存命令以同时实现回显与执行?
解决脚本中重复命令的问题
当然可以,用数组存储命令和参数是最安全的方案,既能避免重复编写导致的不一致,还能妥善处理环境变量含空格、特殊字符的情况。
推荐实现方式
# 将命令及所有参数存入数组 cargo_build_cmd=(cargo build --verbose --manifest-path="$CARGO_XCODE_CARGO_MANIFEST_PATH") # 回显完整命令(会自动展开环境变量的真实值) echo "${cargo_build_cmd[@]}" # 执行命令 "${cargo_build_cmd[@]}"
- 数组会自动维护每个参数的独立性,不会因特殊字符导致参数解析错误;
${cargo_build_cmd[@]}展开后完全等价于直接编写的命令,回显和执行的内容绝对一致。
简单场景的字符串方案(不推荐)
如果你的环境变量确定不含特殊字符,也可以用字符串存储,但风险较高:
cargo_build_str="cargo build --verbose --manifest-path=\"$CARGO_XCODE_CARGO_MANIFEST_PATH\"" # 回显命令 echo $cargo_build_str # 通过eval执行命令(特殊字符可能导致执行异常) eval $cargo_build_str
进阶调试开关
如果需要灵活控制是否输出调试信息,可以加个开关:
DEBUG=true cargo_build_cmd=(cargo build --verbose --manifest-path="$CARGO_XCODE_CARGO_MANIFEST_PATH") if [ "$DEBUG" = true ]; then echo "即将执行:${cargo_build_cmd[@]}" fi "${cargo_build_cmd[@]}"
内容的提问来源于stack exchange,提问作者CalebK
相关产品推荐
相关产品推荐

