我需要在Bash中執行以下命令:擊傳遞參數給一個命令
beeline -u "${DATALAKE_NAMENODE_HIVE}:${DATALAKE_NAMENODE_PORT_HIVE}/pcgexp; -hiveconf .... -f ..... "
的事情是,在Linux中「;」字符是命令結束的指示符,我也需要使用環境變量。我怎樣才能做到這一點? 我該如何做到這一點?
我需要在Bash中執行以下命令:擊傳遞參數給一個命令
beeline -u "${DATALAKE_NAMENODE_HIVE}:${DATALAKE_NAMENODE_PORT_HIVE}/pcgexp; -hiveconf .... -f ..... "
的事情是,在Linux中「;」字符是命令結束的指示符,我也需要使用環境變量。我怎樣才能做到這一點? 我該如何做到這一點?
來自@ilkkachu的答案和chepner的評論一樣,是引用金錢的 - 引用的分號沒有特殊含義,引用的參數比引用的參數集合更有意義。
這就是說,在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[@]}"
這有助於管理性 - 你可以註釋掉參數列表的一部分,有什麼東西被設置,而無需一個超長的命令行來找出一個明確的說法。
在一個正常的(非關聯)數組中,參數總是以它們索引的數字順序輸出,當你追加到數組時,它總是遞增的。
只是引述您需要的部分(改爲較短的變種名稱):
beeline -u "${var}:${anothervar}/pcgexp;" -hiveconf ....
如果var
包含foo
,並anothervar
包含bar
,將給予這些論點:
-u
foo:bar/pcgexp;
-hiveconf
....
引述空格將使字符串成爲單個參數,這可能會或可能不會成爲您需要的參數。
嘗試將每個標記的文本放在引號中,以確保;被包含在引號內。因此,-u「...」-hiveconf「...」-f「...」 –
您可以像命令'env_var = value command arguments'那樣在命令的from中指定環境。 – zhenguoli
正如你在這裏所引用的分號,對'bash'沒有特別的意義。 – chepner