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

Bash脚本中echo命令移除引号问题求助

问题

运行Bash脚本处理文本时,使用echo处理后,"hi"和"bye"周围的引号被移除,达不到预期效果:

相关文件

  • file.txt内容:
${VALUE}
"hi"  "bye"
  • 原执行脚本:
eval "echo \"$(<file.txt)\"" > file2.txt
# 实际输出:hi  bye,预期输出:"hi" "bye"

尝试过以下方法,但未生效:

echo -e \"eval \\\"cat <<EOF
\\$$(cat file.txt)
EOF
\\\" > file2.txt
解决方法

方法1:直接复制文件内容(最简单)

如果不需要处理${VALUE}这类变量,直接用cat复制即可完全保留原文本格式:

cat file.txt > file2.txt

方法2:保留变量展开同时保留引号

如果需要展开${VALUE}这类环境变量,但要保留引号,用envsubst替代eval,它只会解析环境变量,不会处理引号:

# 先设置需要展开的变量(示例)
export VALUE="my_variable_value"
# 替换变量并写入文件
envsubst < file.txt > file2.txt

方法3:用echo保留原内容(不展开变量)

如果一定要用echo,直接读取文件内容作为整体参数,避免shell解析引号:

echo "$(cat file.txt)" > file2.txt

原脚本问题说明

原脚本中eval "echo \"$(<file.txt)\""的问题在于,$(<file.txt)读取的内容会被shell按空格拆分,引号被当作shell语法符号而非文本内容,最终输出时引号被移除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 17:32:21