我有以下bash脚本:
substring($x, Infinity)
当我运行脚本时,mvn命令变为:
set -o xtrace
TEST_CASE=@Login
mvn clean install --Dcucumber.options="--tags ${TEST_CASE}"
请注意,单引号包装整个-D参数,原始双引号已消失。但我想看到的是:
mvn clean install '-Dcucumber.options=--tags @Login'
我的原始脚本有什么问题?我应该如何更新以使其正确?
答案 0 :(得分:2)
引号不是参数的一部分;它们只是为了防止shell将以--D
开头的字符串分成两个要传递给mvn
的参数。以下都是等效的,创建三个参数:
mvn clean install --Dcucumber.options="--tags ${TEST_CASE}"
mvn clean install "--Dcucumber.options=--tags ${TEST_CASE}"
mvn clean install --Dcucumber.options=--tags" ${TEST_CASE}"
以下创建 4 参数,因为tags
与参数之间的空格未引用:
mvn clean install --Dcucumber.options=--tags "${TEST_CASE}"
您可以通过各种方式单独引用空格以保留3参数命令。 (请记住,相邻的字符串会自动连接):
mvn clean install --Dcucumber.options=--tags" ""${TEST_CASE}"
mvn clean install --Dcucumber.options=--tags' '"${TEST_CASE}"
mvn clean install --Dcucumber.options=--tags\ "${TEST_CASE}"
为了保持一致性,set -x
始终会显示一个字符串,需要使用'...'
引用并引用整个字符串,而不只是引用它的一部分。
答案 1 :(得分:1)
bash脚本无效吗?我说对文字字符串使用单引号,对要扩展的字符串使用双引号。
TEST_CASE='@Login'
mvn clean install --Dcucumber.options="--tags ${TEST_CASE}"
有什么错误消息? 我认为问题在于引用实际上并未包含在黄瓜选项中。所以试试这个:
TEST_CASE='@Login'
CUCE_OPTS='"--tags '${TEST_CASE}'"'
mvn clean install --Dcucumber.options=${CUCE_OPTS}