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

如何将含Shell脚本的字符串存入Shell变量并写入文件?

解决Shell脚本写入文件的变量展开与内容保留问题

可行方案汇总

1. 使用单引号包裹echo内容

单引号会完全屏蔽Shell的变量展开与特殊字符解析,能准确写入原脚本内容:

echo '#!/bin/sh' > test.sh
echo 'cat $1' >> test.sh

2. 用Here Document( heredoc)一次性写入

适合多行脚本内容,写法更简洁,且能精准控制是否展开变量:

  • 保留所有原内容(包括$1这类变量符号):
cat > test.sh << 'EOF'
#!/bin/sh
cat $1
EOF

(注意EOF用单引号包裹,此时内部所有内容都会原样写入)

  • 需要替换部分内容(比如替换脚本里的指定字符串):
    假设要把脚本中的目标路径替换为自定义变量,可去掉EOF的单引号,让Shell展开指定变量,同时用转义保留原变量符号:
custom_path="/home/user/data.txt"
cat > test.sh << EOF
#!/bin/sh
echo "目标文件路径:$custom_path"
cat \$1  # \$1会被原样保留为$1写入文件
EOF

问题原因说明

你之前用双引号执行echo -e "cat $1"时,$1会被当前Shell的位置参数(如果存在)替换,导致写入的内容不是预期的cat $1;而#!/bin/sh本身不会被系统解释,异常输出大概率是变量展开后引发的连锁问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 10:50:58