Perl 在Unix中发送密码时出现SFTP美元符号问题

Perl 在Unix中发送密码时出现SFTP美元符号问题,perl,unix,sed,Perl,Unix,Sed,我需要将文件SFTP到服务器。密码有一个美元符号$,我需要将其转义 我尝试了可以替换的Perl和sed命令,但是没有添加$后面的字符串 例子: 输出 它应该是Np4\\$g,但是g没有被追加 代码: /usr/bin/expect我建议不要逃避和替换 "Np4$g" 借 你的命令 echo "Np4$g" | perl -pe 's/$/\\\\\$/g' 失败有两个原因 在“Np4$g”中,shell将变量g插入双引号字符串中。它可能没有定义,所以被替换为nothing,您只是将Np4传

我需要将文件SFTP到服务器。密码有一个美元符号
$
,我需要将其转义

我尝试了可以替换的Perl和sed命令,但是没有添加
$
后面的字符串

例子: 输出 它应该是
Np4\\$g
,但是
g
没有被追加

代码:
/usr/bin/expect我建议不要逃避和替换

"Np4$g"

你的命令

echo "Np4$g" | perl -pe 's/$/\\\\\$/g'
失败有两个原因

  • “Np4$g”
    中,shell将变量
    g
    插入双引号字符串中。它可能没有定义,所以被替换为nothing,您只是将
    Np4
    传递给perl。您需要使用单引号来防止插值

  • 在Perl替换中,模式中的
    $
    匹配字符串的结尾,而不是一个文字美元。这意味着
    Np4
    更改为
    Np4\\\$
    。您需要对模式中的美元符号进行转义,以使其与文字
    $

这将正常工作

echo 'Np4$g' | perl -pe 's/\$/\\\$/g'
输出 /usr/bin/expect见:
"Np4$g"
'Np4$g'
echo "Np4$g" | perl -pe 's/$/\\\\\$/g'
echo 'Np4$g' | perl -pe 's/\$/\\\$/g'
Np4\$g