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

