我在尝试将单引号引起来时遇到问题

I have a problem trying to put single quotes around a text

我的密码包含带感叹号的特殊字符。

ABcD!987zyz12388

我想用单引号引起来。此密码被提取并保存到一个变量中。

$mypass=`fetchpwd $sourceserver $loginacct`;
$mypass="'$mypass'";

print "My password is: $mypass\n";

return 看起来像这样

My Password is 'ABcD!987zyz12388
'

下一行结束单引号。我怎样才能在最后一个 8 之后得到最后一个单引号到这样的 'ABcD!987zyz12388'

使用chomp删除由fetchpwd命令添加的换行符。在添加单引号之前执行此操作。

$mypass=`fetchpwd $sourceserver $loginacct`;
chomp $mypass;
$mypass="'$mypass'";

print "My password is: $mypass\n";

你已经有了一个很好的答案,但我想分享一个程序员小技巧,它可能会帮助你自己找出问题所在。

您认为是将引号添加到导致问题的字符串。您的程序证明:

$mypass=`fetchpwd $sourceserver $loginacct`;
$mypass="'$mypass'";

print "My password is: $mypass\n";

当您调查像这样被“损坏”的数据时,第一步是准确确定损坏发生的时间。只要有可能发生变化,您就可以通过打印数据来做到这一点。在这种情况下,最好在第一次设置 $mypass 之后在你对它进行任何操作之前打印它:

$mypass=`fetchpwd $sourceserver $loginacct`;
print "My password is: $mypass\n";
$mypass="'$mypass'";

print "My password is: $mypass\n";

现在,这会给你两个换行符(你明确打印的那个,还有你从 fetchpwd 得到的额外一个 - 导致你出现问题的那个。有时,连续两个换行符很难发现。所以最好将字符放在您要打印的值周围。我喜欢使用 <...>:

$mypass=`fetchpwd $sourceserver $loginacct`;
print "My password is: <$mypass>\n";
$mypass="'$mypass'";

print "My password is: <$mypass>\n";

这会告诉您额外的换行符从一开始就存在,因此,您在它周围添加引号并不是破坏它的原因。而且,希望它会导致您调查 fetchpwd.

返回的确切内容