如何解决Bash 变量包括“<<EOF”
我正在尝试在 bash 中创建一个函数来自动化 sftp。类似的东西:
sftp host:dir <<EOF
put afile.txt
exit
EOF
问题是我需要最后一部分作为变量。所以像:
file="<<EOF
put afile.txt
exit
EOF"
所以我可以像使用它
stfp host:dir $file
这显然行不通。我有两个我不知道要解决的问题: 在一行中创建变量 $file 并将变量添加到命令中。
任何帮助将不胜感激
PS:抱歉挑剔。我已经尝试了 echo -n $var | stfp
和 sftp -b script_file
的选项。但是我正在寻找可以在最新位置上进行论证并且可以写成一行的东西。
解决方法
此处未加引号的文档做插值。因此,
sftp host:dir <<EOF
put ${file@Q}
exit
EOF
我在 $file
周围加了引号以说明文件名包含空格的情况。
更新:纳入 Léa Gris 的评论。
注意:语法 @Q
在 bash 手册页的标题参数转换 下描述:
扩展是一个字符串,它是引用格式的参数值,可以作为输入重复使用。
虽然这意味着引用的方式是输入可以被 bash 重用,但 IMO 对于 ftp 脚本中的语法也应该足够了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。