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

在bin/sh/bash中使用$*调用clang后如何保留单引号参数?

解决Shell包装器中Clang参数传递的引号保留问题

问题根源在于脚本中使用$*传递参数时,Shell会将所有参数拼接成单一字符串后按空格拆分,导致带引号的参数(如-DPACKAGE_VERSION="2.2.0-pre")失去引号的边界保护,被拆分为-DPACKAGE_VERSION=和"2.2.0-pre"两个独立参数,Clang因此将后者误判为不存在的文件路径。

以下是修正后的脚本:

#!/bin/sh

CLANG=${CLANG:-clang}

# 检查参数中是否包含"keyword",避免参数拆分错误
if printf "%s\n" "$@" | grep -q "keyword"; then
  exec "$CLANG" "$@"
else
  exec "$CLANG" "$@" -fsanitize=hextype
fi

关键修改说明:

  • 用"$@"替代$*:"$@"会严格保留每个原始参数的边界,即使参数包含空格或引号,也能完整传递给Clang。
  • 优化参数检查逻辑:原echo $* | grep会破坏参数结构,改用printf "%s\n" "$@"逐个输出参数,配合grep -q判断关键词存在性,避免参数拆分问题。
  • 给$CLANG添加双引号:防止CLANG变量包含特殊字符或空格时出现执行错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 03:45:41