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

如何在bash脚本中向另一脚本写入变量本身而非其已存储的取值

你遇到的问题根源是Bash双引号环境会自动展开$开头的变量,你当前写法里双引号包裹的$1会被当前执行的父脚本替换为传入的第一个参数值,再写入新生成的脚本,所以得不到你要的字面量$1。

方案1:转义$字符

在$前加反斜杠\,告诉Bash这是普通字符不需要展开:

#!/bin/bash

echo -e "#!/bin/bash\ncp ~/src/\$1" > ~/asset/newfile.sh

方案2:用单引号包裹输出内容

Bash单引号环境下所有特殊字符都会被视为普通字面量,不会做变量展开:

#!/bin/bash

echo -e '#!/bin/bash\ncp ~/src/$1' > ~/asset/newfile.sh

方案3:用带引号的Here Document生成(更适合多行内容场景)

如果后续要生成的新脚本内容比较多,用Here Document写法更易读,给结束标识符加单引号即可关闭整个块的变量展开:

#!/bin/bash

cat > ~/asset/newfile.sh <<'EOF'
#!/bin/bash

cp ~/src/$1
EOF

注意这里结束标识符EOF两侧的单引号不能省略,否则还是会触发变量展开。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:36:01