просто то, что я не могу понять это. Начинающий скрипт 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 ответ1

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"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .