如何将含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
相关产品推荐
相关产品推荐

