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

Bash脚本调用bamql时的单双引号与变量替换问题

解决Bash脚本调用bamql时变量不替换的问题

问题核心是Bash单引号会阻止变量展开,你用单引号包裹包含${CHRN}和${SNV}的字符串,导致这些变量被当作字面量传递给bamql,自然无法识别。以下是几种可行的解决方法:

方法1:将查询字符串改用双引号包裹

直接把单引号换成双引号,Bash会自动展开双引号内的变量:

bamql -f "${FILE_IN}" "chr(${CHRN}) & nt_exact(${SNV})" -o "${FILE_OUT}"

注意给所有变量(${FILE_IN}、${FILE_OUT})也加上双引号,避免文件名含空格时出现错误。

方法2:单引号+双引号拼接(适合字符串含特殊字符的场景)

如果查询字符串里有需要单引号转义的特殊字符,可以把变量部分单独用双引号包裹,和单引号部分拼接:

bamql -f "${FILE_IN}" 'chr('"${CHRN}"') & nt_exact('"${SNV}"')' -o "${FILE_OUT}"

这里'chr('是单引号包裹的字面量,"${CHRN}"是展开的变量,再拼接') & nt_exact(',最后是变量"${SNV}"和')',整体组合成正确的查询字符串。

方法3:正确使用数组传递参数

你之前的数组写法用了单引号,导致变量没展开,改用双引号定义数组元素即可:

args=("chr(${CHRN}) & nt_exact(${SNV})")
bamql -f "${FILE_IN}" "${args[@]}" -o "${FILE_OUT}"

如果后续需要拆分更多参数到数组,也可以按参数拆分,但这里查询字符串是一个整体,放在一个数组元素里即可。

额外注意事项

  • 确保变量CHRN(如PB2)和SNV(如482,T)的赋值正确,没有多余空格或引号。
  • 测试时可以先通过echo命令输出完整命令,确认变量是否正确展开,比如:
    echo bamql -f "${FILE_IN}" "chr(${CHRN}) & nt_exact(${SNV})" -o "${FILE_OUT}"
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 20:45:28