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

Shell单双引号嵌套变量不展开 lftp命令cert参数替换问题

问题根因

Shell 语法中,单引号包裹的字符串会完全保留字符的字面含义,不会执行变量替换、命令替换等操作。你当前使用的命令中,$cert 处于 -e 参数后的单引号包裹范围内,因此无法被替换为预先定义的路径值。

修复方案

你可以选择以下任意一种方式修改命令,实现 $cert 变量的正常展开:

方案1:拆分单引号拼接变量(推荐,无需转义内部字符)

将需要替换的变量部分从单引号中拆出,用双引号包裹变量保证特殊字符兼容,再和前后的单引号内容拼接即可:

lftp sftp://$user:@$host -e 'set net:max-retries 2; set net:reconnect-interval-base 5; set net:reconnect-interval-multiplier 1; set sftp:connect-program "ssh -a -x -i '"$cert"'"'

方案2:外层改用双引号,转义内部双引号

把 -e 后的整段参数改用双引号包裹,同时将内部原来的双引号加反斜杠转义即可:

lftp sftp://$user:@$host -e "set net:max-retries 2; set net:reconnect-interval-base 5; set net:reconnect-interval-multiplier 1; set sftp:connect-program \"ssh -a -x -i $cert\""

两种方案执行后,$cert 都会被正常替换为你预先定义的证书路径,得到你预期的最终执行命令。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:57:00