参数是什么'在shell代码中使用这里?

时间:2017-01-25 10:54:06

标签: shell hadoop

hadoop jar cc-jar-with-dependencies.jar com.coupang.pz.cc.merge.Merge_Run \
    ${IDF_OUT}\
    ${IG_OUT}\
    ${PROB_OUT}\
    ${MERGE_OUT}\
    1.00 \
    0.000001 \
    0.0001 \

有一段shell代码,我知道hadoop将在hdfs上运行cc-jar-with-dependencies.jar。但是第二行下面其他参数的含义是什么。它们是jar包所需的参数吗? $ {...}是hdfs上的路径,例如$ {IDF_OUT}等等。

2 个答案:

答案 0 :(得分:1)

使用{WORD}bashParamter Expansion的基本情况,shell

  

$ PARAMETER

     

$ {PARAMETER}

     

最简单的形式是在大括号内使用参数的名称。这与使用$ FOO完全相同,就像你在任何地方看到它一样,但其优点是可以立即跟随字符,否则将被解释为参数名称的一部分。

举个例子,

word="car"
echo "The plural of $word is most likely $words"
echo "The plural of $word is most likely ${word}s"

生成输出,

The plural of car is most likely
The plural of car is most likely cars

请按预期查看不包含cars的第一行,因为shell只能解释${word}而不能解释$words

回到你的榜样,

hadoop jar cc-jar-with-dependencies.jar com.coupang.pz.cc.merge.Merge_Run \
    ${IDF_OUT}\
    ${IG_OUT}\
    ${PROB_OUT}\
    ${MERGE_OUT}\
    1.00 \
    0.000001 \
    0.0001 \

从第二行开始,变量${IDF_OUT}${IG_OUT}${PROB_OUT}${MERGE_OUT}都有可能是某些变量(可能是{中的环境变量) {1}}文件系统)在运行命令时将扩展为值。

虽然我已经解释了hadoop语法是什么,但上述变量的实际目的在${WORD}的上下文中并不十分相关。

答案 1 :(得分:1)

这些参数传递给hadoop命令,因此您需要阅读该命令的文档。

但是,在运行脚本时找出这些参数中包含的值可能会很有趣。你可以这样修改代码,如下所示:

echo >&2 \
hadoop jar cc-jar-with-dependencies.jar com.coupang.pz.cc.merge.Merge_Run \
    ${IDF_OUT}\
    ${IG_OUT}\
    ${PROB_OUT}\
    ${MERGE_OUT}\
    1.00 \
    0.000001 \
    0.0001 \

此更改将导致整个命令被打印而不是执行,而>&2导致标准输出输出到标准错误(如果有一些输出捕获,这可能有助于将数据打印到终端继续)。请注意,此更改仅用于调试/好奇,它将使您的脚本省略命令的执行。

如果您知道这些值,整个命令可能更容易理解。