繁体   English   中英

Bash将参数传递给命令

[英]Bash passing arguments to a command

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

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

关键是在Linux中,“;” 字符是命令结束的指示符,我还需要使用环境变量。 我怎样才能做到这一点? 我该如何实现?

只需引用所需的部分即可(更改为较短的var名称):

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

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

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

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

@ilkkachu的答案与金钱有关,chepner的评论也是如此-带引号的分号没有特殊含义,带引号的参数比带引号的SET更有意义。

也就是说,在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[@]}"

这有助于提高可管理性-您可以注释掉参数列表的一部分,对设置的内容有清晰的了解,而无需花费超长的命令行来了解。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM