[英]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.