带有单引号和双引号的动态 shell 脚本 [duplicate]

Dynamic shell script with single and double quotes [duplicate]

提问人:Rupesh Patil 提问时间:9/20/2021 最后编辑:Antonio PetriccaRupesh Patil 更新时间:11/3/2021 访问量:220

问:

我正在尝试通过传递运行时参数来执行以下命令

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"'
Linux Bash Shell 行情

评论

0赞 Rupesh Patil 9/21/2021
这对我有用:lftp sftp://${user}:@${host} -e 'set net:max-retries 2;设置 net:reconnect-interval-base 5;设置 net:reconnect-interval-multiplier 1;设置 sftp:connect-program “ssh -a -x -i '${cert}'”'

答:

0赞 Antonio Petricca 9/20/2021 #1

单引号不会扩展变量,因此您必须将其插入

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

评论

0赞 Rupesh Patil 9/21/2021
lftp sftp://${user}:@${host} -e '设置 net:max-retries 2;设置 net:reconnect-interval-base 5;设置 net:reconnect-interval-multiplier 1;设置 sftp:connect-program “ssh -a -x -i '${cert}'”'
0赞 serghei 9/20/2021 #2

给你:

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