Сценарий оболочки: окружать переменную кавычками при переходе в массив?

У меня есть сценарий оболочки, часть которого делает это:

bundle exec rake parallel[${@:3}];

${@:3} является динамическим и может быть чем-то вроде -p thread11 THREAD=test_thread11 или просто @test.feature

Задача rake ожидает один аргумент, но независимо от того, что я пытаюсь сделать, я не могу заставить сценарий оболочки заключить переменную в кавычки, поэтому вместо отправки чего-то вроде

пакет exec rake parallel["-p thread11 THREAD=test_thread11"]

я заканчиваю тем, что отправляю

пакет exec rake parallel[-p thread11 THREAD=test_thread11]

Что приводит к сбою задачи rake.

С оператором эха я могу получить правильный вывод, выполнив

echo "Будет использоваться команда запуска" package exec rake parallel["'${@:3}'"]

Можно ли при передаче в задачу заключить значение переменной в кавычки?


person MisterMan    schedule 15.10.2019    source источник


Ответы (1)


Похоже, вы хотите вместо этого использовать "${*:3}", что создаст одно слово с разделителями-пробелами из 3 аргументов, а не серию отдельных слов, по одному на аргумент.

person chepner    schedule 15.10.2019
comment
Благодарю вас! Вроде бы все, не подскажете, как называется эта нотация? Я новичок в написании сценариев оболочки, поэтому я прочитаю об этом. - person MisterMan; 15.10.2019
comment
@ и * — это два разных специальных параметра (поищите этот термин на странице руководства). $* ведет себя более нормально, в то время как $@ имеет особое поведение в кавычках (поэтому никогда не следует использовать без кавычек и редко в большой строке в кавычках). - person chepner; 15.10.2019