没有 eval 命令无法正确运行

没有 eval 命令无法正确运行

只是有些事情我似乎无法弄清楚。初学者 bash 脚本编写者在这里

我编写了一个脚本来接受命令行参数,然后将其传递给 maven

这是该脚本的工作版本:

#!/bin/bash -x

# deploys the application and runs acceptance tests against it
if [ -n "$1" ]; then
#Executes acceptance tests containing the word $1 - eg: ats paymill, will only run test scenarios with the paymill word
    echo mvn clean verify -Pacceptance.test -Dcucumber.options=\"-n $1\"
    eval $(echo mvn clean verify -Pacceptance.test -Dcucumber.options=\"-n $1\")
else
    mvn clean verify -Pacceptance.test;
fi

但我希望这会起作用:

#!/bin/bash -x

# deploys the application and runs acceptance tests against it
if [ -n "$1" ]; then
#Executes acceptance tests containing the word $1 - eg: ats paymill, will only run test scenarios with the paymill word
    echo mvn clean verify -Pacceptance.test -Dcucumber.options=\"-n $1\"
    mvn clean verify -Pacceptance.test -Dcucumber.options=\"-n $1\"
else
    mvn clean verify -Pacceptance.test;
fi

但是最后一个脚本的执行(使用 -x 标志)给了我以下输出

+ '[' -n paymill ']'
+ echo mvn clean verify -Pacceptance.test '-Dcucumber.options="-n' 'paymill"'
mvn clean verify -Pacceptance.test -Dcucumber.options="-n paymill"
+ mvn clean verify -Pacceptance.test '-Dcucumber.options="-n' 'paymill"'

我可以看到 echo 命令的结果是我所期望的,但如果我尝试运行它而不是回显,它就不起作用。

-Dcucumber.options 周围以及 -n 和 paymill 单词之间的这些引号从何而来?

谢谢你的帮助,只是搞不懂这一点

答案1

后面的空格-n没有加引号或反斜杠,因此 bash 会对其进行分词。为了防止这种情况,请用引号或反斜杠将其括起来。这样做之后,您可以删除双引号,因为整个参数现在是一个单词:

mvn clean verify -Pacceptance.test -Dcucumber.options=-n\ $1
# or
mvn clean verify -Pacceptance.test -Dcucumber.options=-n' '$1

如果参数可以包含空格,您还应该考虑用双引号引起来。

mvn clean verify -Pacceptance.test -Dcucumber.options="-n $1"

相关内容