什么`tar cvf fred | flintstone <barney&rubble> betty`在Perl系统命令中做什么?</barney&rubble>

时间:2010-09-23 10:15:06

标签: perl

下面的陈述究竟说了什么?

my @dirs = qw(fred|flintstone <barney&rubble> betty );

完整的故事是:

my $tarfile = "something*wicked.tar";
my @dirs = qw(fred|flintstone <barney&rubble> betty );
system "tar", "cvf", $tarfile, @dirs;

这取自 Learning Perl ,第4版。

system command将在shell上运行的结果是:

tar cvf fred|flintstone <barney&rubble> betty

但是这个命令在unix上有意义吗?

4 个答案:

答案 0 :(得分:5)

来自perldoc perlop

qw/STRING/
           Evaluates to a list of the words extracted out of STRING, using
           embedded whitespace as the word delimiters.  It can be understood
           as being roughly equivalent to:

               split(' ', q/STRING/);

           the differences being that it generates a real list at compile
           time, and in scalar context it returns the last element in the
           list.  So this expression:

               qw(foo bar baz)

           is semantically equivalent to the list:

               'foo', 'bar', 'baz' 

答案 1 :(得分:4)

qw()通过空格(空格,制表符,任意数量)将括号中的字符串拆分并返回一个列表:"fred|flintstone", "<barney&rubble>", "betty"

编辑:来自@kemp的提示:它返回一个列表

现在回答您的最新问题:

tar cvf fred|flintstone <barney&rubble> betty

是的,字符|<>&在Linux中有意义:

|将标准输出从tar cvf fred重定向到flintstone的标准输入。

<将文件barney发送到flintstone的标准输入

&运行上一个命令并将其发送到后台

>rubble的标准输出写入文件betty

整行是否有意义,取决于个别程序。

答案 2 :(得分:3)

它会创建以下值的列表:

fred|flinstone
<barney&rubble>
betty

并将其分配给数组@dirs

qw代表“引用词”,因此它会创建一个使用空格作为分隔符给出的值列表。

关于您的编辑:unix命令tar创建给定文件的存档。 cvf是控制其行为的标志:

c - create archive
v - verbose mode
f - use following argument as archive name

接下来是要保存存档的文件的名称,以及要包含在其中的其他文件的列表。

答案 3 :(得分:2)

您可以使用Data :: Dumper查看dirs的样子:

$ perl -e 'use Data::Dumper; my @dirs = qw(fred|flintstone <barney&rubble> betty ); print Dumper(@dirs);'

$VAR1 = 'fred|flintstone';
$VAR2 = '<barney&rubble>';
$VAR3 = 'betty';

或者感谢Eugene:

$ perl -e 'use Data::Dumper; my @dirs = qw(fred|flintstone <barney&rubble> betty ); print Dumper \@dirs;'
$VAR1 = [
          'fred|flintstone',
          '<barney&rubble>',
          'betty'
        ];

哪个更好!

Quote_and_Quote_like_Operators也很有帮助。它提醒qq qw等。