0

在两个文件名之间插入了一个换行符。我该如何避免这种情况?

$diff = `comm -3 "/tmp/${PATH1U}_${SITE1}_s_${USER} /tmp/${PATH2U}_${SITE2}_s_${USER}"|wc -l`;

这是执行时的错误消息:

comm: `/tmp/file1\n /tmp/file2\n' 后缺少操作数

4

1 回答 1

4

两个问题:

  • $USER的值以换行符结尾。你可以chomp把它拿走。使固定:

    chomp($USER);
    
  • 您正在通过一条非常长且不正确的路径,而不是两条。使固定:

    `comm -3 '/tmp/${PATH1U}_${SITE1}_s_${USER}' '/tmp/${PATH2U}_${SITE2}_s_${USER}' | wc -l`
    

    但这是创建 shell 文字的一种骇人听闻的方式。清洁器:

    use String::ShellQuote qw( shell_quote );
    
    my $comm_cmd = shell_quote('comm', '-3',
       "/tmp/${PATH1U}_${SITE1}_s_${USER}",
       "/tmp/${PATH2U}_${SITE2}_s_${USER}");
    
    `$comm_cmd | wc -l`
    
于 2016-06-10T15:49:39.727 回答