perl $* 问题中有一个重大错误[已关闭]

w8rqjzmb  于 2023-08-06  发布在  Perl
关注(0)|答案(1)|浏览(155)

**已关闭。**此问题为not reproducible or was caused by typos。它目前不接受回答。

此问题是由打印错误或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这一个是解决的方式不太可能帮助未来的读者。
23天前关闭
社区在23天前审查了是否重新打开此问题,并将其关闭:
原始关闭原因未解决
Improve this question
我的perl脚本中有以下代码,它只是一个print语句。$*是用引号括起来的,我只是想打印出来,但它给出了一个致命的错误。

print OUT4 "\texec su -c $0 $*\n\techo \"exec failed!\";

字符串
这不可能是一个致命错误。错误是$* is no longer supported
我尝试打印,我期望它打印$*,而不是错误。

gv8xihay

gv8xihay1#

首先

su -c $0 $*

字符串
应该是

su -c "$0" "$@"


(Yes,即$@而不是$*。)
如果$0或任何参数中有空格,那么您的方法将失败。
关于你的问题。
$在双引号字符串中有特殊的含义,所以如果你想让它包含在字符串中,你需要转义它。当"是定界符时,"也是如此。

print OUT4 "exec su -c \"\$0\" \"$@\"\necho 'exec failed!'\n";


我会这样写,因为它更容易阅读:

say OUT4 q{exec su -c "$0" "$@"};
say OUT4 q{echo 'exec failed!'};


这也将工作:

say OUT4 q{exec su -c "$0" "$@" || echo 'exec failed!'};

相关问题