只是有些事情我似乎无法弄清楚。初学者 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"