2012-03-08 101 views
1

这些days.i'm学习shell脚本的fun.When我喜欢阅读手册的例子:

set $(wc -l $title_file) 
    num_titles=$1 
    set $(wc -l $tracks_file) 
    num_tracks=$1 

和我有短暂的理解是,命令,设置,指定$ 1和设定值$ 1到num_titles。 但是,我不知道为什么要用-l作为该命令的选项,顺便set.And,将任何人可以解释它的整个故事?THX

+0

这个例子很奇怪。跳过set命令会更常见,只需写下:num_titles = $(wc -l $ title_file) – 2012-03-08 13:18:43

回答

3

首先set设置一个环境变量。 根据其手册页使用语法set var = valueset var [n] = word查看手册页类型man set

在这种情况下,set使用第二种语法制作$1 = $(wc -1 $titlefile),然后将num_titles设置为$ 1作为常规变量,因为使用的语法。

wc是wordcount命令,并显示文件中的行,字符和单词。

wc -l告诉wc根据wc手册页逐行计数,以查看手册页类型man wc

查看Linux Shell Scripting Tutorial A Beginner's handbookAdvanced Bash-Scripting Guide作进一步参考。

+0

我明白了,thx.And顺便说一下,无论何时,默认情况下,我使用命令,设置,它会将新值设置为第一个参数? – 2012-03-08 06:18:08

+0

是的,这是正确的,根据设置手册页子句'其余 参数是位置参数,并按 订单分配给$ 1,$ 2,....' – Appleman1234 2012-03-08 07:40:54

+0

在sh中,'set'不使用所描述的语法这里。在csh中,这里使用的语法设置了一个变量,但不是一个环境变量。 – 2012-03-08 13:17:39

3

-l开关计数的数目在你的情况下,在指定文件 中的行,它将计算titles文件中的行数并将其设置为num_titles变量(并计算由tracks_file变量指定的文件中的行数并设置该值到num_track变量)

,你可以简单地尝试 厕所-l命令行上 看到的价值它打印出

+0

我明白了,thx.And顺便说一下,无论何时,默认情况下,我使用命令set会将新值设置为第一个参数吗? – 2012-03-08 06:16:02

+0

是的。所以,如果你做**设置abc **变量$ 1现在等于“a”,$ 2 = b和$ 3 = c – 2012-03-08 06:32:47