带单引号和双引号的动态shell脚本



我试图通过传递运行时参数

来执行以下命令
host=10.130.21.182
user=test-lftp
cert=/tools/abc/a200338-ivon.ppk
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"'

但是最后的命令像下面这样是不正确的

lftp sftp://test-lftp:@10.130.21.182 -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"'

请帮我生成下面预期的命令

lftp sftp://test-lftp:@10.130.21.182 -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 /tools/abc/a200338-ivon.ppk"'

单引号不能展开变量,所以你必须在

中修改它
lftp sftp://test-lftp:@10.130.21.182 -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""

给你:

host=10.130.21.182
user=test-lftp
cert=/tools/abc/a200338-ivon.ppk
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"

单引号内的所有内容都按字面意思保留,没有例外:

foo="bar"
echo 'baz "$foo"'
echo 'baz '"$foo"

将打印:

baz "$foo"
baz bar

相关内容

  • 没有找到相关文章

最新更新