2017-04-09 138 views
0

我試圖通過bash腳本傳遞一個空格字符串作爲./triggerSparkApp 'Premier League'如何傳遞一個空格字符串作爲bash中的函數參數

我以這種方式通過bash腳本實現它;

if [ [email protected] -eq "${0}" ] 
    then 
    echo "No arguments" 
    else 
     spark-submit --master yarn-client --jars hive-hcatalog-core-0.13.0.jar spark-queries-1.0-SNAPSHOT-jar-with-dependencies.jar "${0}" --driver-memory 4g --executor-memory 2g --executor-cores  
fi 

參數應該在spark-submit之前傳遞給--driver-memory。因爲它是返回:

[: too many arguments 

我將不勝感激任何幫助。謝謝

回答

-1

您需要使用圍繞[email protected]的報價,以避免分詞。並使用==作爲字符串的比較;對於整數

if [ "[email protected]" == "${1}" ] 
    then 
    echo "No arguments" 
    else 
     spark-submit ... 
fi 

或者,您可以使用[[ .. ]]其中不執行單詞拆分。

+0

我可能是錯的,但我不認爲OP想要測試參數值,但爲了存在。另外,我不認爲'$ 0'是真正意義上的用途(它不是第一個參數,我認爲這是OP的假設)。 – Fred

+0

與'$ 0'的比較意味着OP要檢查整個參數是否與其第一個參數相同,即單詞被認爲是一個參數。但是你說得對,0美元不是OP打算使用的。編輯它。休息,只有OP可以澄清。 – usr

+0

這是行得通......但出於一些有趣的原因,它輸出[[英超聯賽:命令未找到....並仍然運作 – EP89

3

我想這是你想要什麼:

if [ "$#" -eq 0 ] 
then 
    echo "No arguments" 
else 
    spark-submit --master yarn-client --jars \ 
    hive-hcatalog-core-0.13.0.jar \ 
    spark-queries-1.0-SNAPSHOT-jar-with-dependencies.jar \ 
    "$1" --driver-memory 4g --executor-memory 2g --executor-cores  
fi 

$#擴展到參數的個數。第一個參數是$1,而不是$0,所以我替換了​​命令中的那個。 \延續只是爲了便於閱讀。

另一種方法我喜歡以執行參數測試存在是這樣的:

if (($#)) 
then 
    spark-submit --master yarn-client --jars \ 
    hive-hcatalog-core-0.13.0.jar \ 
    spark-queries-1.0-SNAPSHOT-jar-with-dependencies.jar \ 
    "$1" --driver-memory 4g --executor-memory 2g --executor-cores  
else 
    echo "No arguments" 
fi 

(())測試中,當它包含計算結果爲一個整數的表達式,返回0(真),如果整數是非零,否則爲非零值(假)。

相關問題