2017-04-09 137 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(真),如果整数是非零,否则为非零值(假)。

相关问题