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

运行Bash脚本时如何保留多层引号嵌套中的单引号字符

问题原因

Bash中单引号包裹的字符串内无法直接嵌套单引号,你原脚本中'{"prop": "My best 'app'"}' 会被Bash解析为三段拼接:

  1. 第一段单引号字符串:'{"prop": "My best '
  2. 未被引号包裹的普通字符串:app
  3. 第二段单引号字符串:'"}'
    三段拼接后内层的单引号直接被丢弃,就出现了你看到的执行结果。
修复方案

这里提供三种常用的可行写法,都能保留app两侧的单引号:

方案1:单引号嵌套转义法

单引号内要插入单引号时,使用'\''格式(先闭合外层单引号、转义插入一个单引号、再重新开启外层单引号),修改后的脚本如下:

#!/usr/bin/env bash

java -jar some.jar --test='{"prop": "My best '\''app'\''"}'

执行bash -x main.sh可以看到输出为:

+ java -jar some.jar '--test={"prop": "My best '\''app'\''"}'

参数内的单引号会被正确保留。

方案2:双引号包裹法

改用双引号包裹整个参数,只需要转义内部的JSON双引号即可,内部单引号不需要额外处理:

#!/usr/bin/env bash

java -jar some.jar --test="{\"prop\": \"My best 'app'\"}"

方案3:变量预存法(可读性更高)

如果参数比较复杂,推荐先把参数值存入变量再引用,避免嵌套混乱:

#!/usr/bin/env bash

TEST_PARAM='{"prop": "My best '\''app'\''"}'
java -jar some.jar --test="$TEST_PARAM"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:54:03