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

Bash中HereDoc精简脚本后参数未识别,求正确写法

问题分析与正确实现

你的精简思路没问题,但核心错误是把${PASSWORD}放进了第一个参数的here-doc里——这样expecto只会收到一个参数(包含${PASSWORD}文本和ssh命令的字符串),完全没拿到本该作为第二个参数的密码值,自然无法正常运行。

正确的精简写法

直接保留原逻辑的参数结构,只是去掉临时变量tmp,把命令替换直接作为第一个参数,第二个参数单独传递${PASSWORD}即可:

expecto "$(cat <<'EOT'
ssh user@sv7247.xserver.jp
EOT
)" "${PASSWORD}"

为什么这样可行?

  • <<'EOT'的单引号会让here-doc内的内容完全不做变量展开,确保传给expecto的第一个参数就是纯ssh user@sv7247.xserver.jp命令;
  • ${PASSWORD}作为独立的第二个参数传递,expecto能正确识别到这个密码参数,和原脚本的逻辑完全一致,同时实现了精简。

如果想更简洁,甚至可以省略cat,用bash的here-string特性(适合bash专属环境):

expecto $'ssh user@sv7247.xserver.jp' "${PASSWORD}"

要是命令没有换行或特殊字符,直接用单引号包裹字符串更简单:

expecto 'ssh user@sv7247.xserver.jp' "${PASSWORD}"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:08:12