首页 > 解决方案 > 带单引号和双引号的动态 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"'

标签: linuxbashshellquotes

解决方案


单引号不会扩展变量,因此您必须将其更改为

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\""

推荐阅读