Bash将参数传递给命令

时间:2017-05-04 10:28:32

标签: linux bash

我需要在Bash中执行以下命令:

beeline -u "${DATALAKE_NAMENODE_HIVE}:${DATALAKE_NAMENODE_PORT_HIVE}/pcgexp; -hiveconf ....  -f ..... "

事情就是在Linux中';' character是命令结束的指示符,我还需要使用环境变量。我怎样才能做到这一点? 我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:0)

只需引用您需要的部分(更改为较短的var名称):

beeline -u "${var}:${anothervar}/pcgexp;" -hiveconf .... 

如果var包含foo,而anothervar包含bar,则可以提供以下参数:

-u
foo:bar/pcgexp;
-hiveconf
....

引用空格会使字符串成为单个参数,这可能是您需要的也可能不是。

答案 1 :(得分:0)

来自@ilkkachu的答案就是钱,就像查普纳的评论一样 - 引用的分号没有特殊含义,引用的论证比引用的一组论证更有意义。

那就是说,在bash中处理参数的另一种方法是使用数组。

declare -a b_args=()

b_args+=( -u "${DATALAKE_NAMENODE_HIVE}:${DATALAKE_NAMENODE_PORT_HIVE}/pcgexp;" )
b_args+=( -hiveconf "...." )
b_args+=( -f "....." )

beeline "${b_args[@]}"

这有助于管理 - 您可以注释掉参数列表的一部分,清楚地了解所设置的内容,而无需使用超长命令行来确定。

在普通(非关联)数组中,参数始终以其索引的数字顺序输出,当您追加到数组时,它总是递增。