我需要在Bash中执行以下命令:
beeline -u "${DATALAKE_NAMENODE_HIVE}:${DATALAKE_NAMENODE_PORT_HIVE}/pcgexp; -hiveconf .... -f ..... "
事情就是在Linux中';' character是命令结束的指示符,我还需要使用环境变量。我怎样才能做到这一点? 我怎样才能做到这一点?
答案 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[@]}"
这有助于管理 - 您可以注释掉参数列表的一部分,清楚地了解所设置的内容,而无需使用超长命令行来确定。
在普通(非关联)数组中,参数始终以其索引的数字顺序输出,当您追加到数组时,它总是递增。