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
相关产品推荐
相关产品推荐

