Вычислить строку bash в массив в bash - PullRequest
0 голосов
/ 12 июля 2020

Я использую задачу VS Code для запуска сценария, который запускает мои шутливые тесты для текущего открытого файла. Он предлагает мне ввести тестовый шаблон и, если что-то введено, передает значение в качестве переменной среды. Я хочу разделить эту переменную на изменяемый массив, переданный в качестве аргументов моему вызову jest. Поскольку имена тестов почти всегда содержат пробелы (или любой другой символ), я хочу иметь возможность передавать несколько шаблонов в кавычках.

Входные

"test 1" "test 2" "test 3"

Сгенерированные переменные среды

args='"test 1" "test 2" "test 3"'
testFile="path/to/currently opened/file"

Желаемая команда для запуска в скрипте:

npm run test -- "path/to/currently opened/file" -t "test 1" -t "test 2" -t "test 3"

Я понял, как делать все, кроме оценки $args как массива. Вот что мне нужно для проверки различных попыток его анализа.

#!/bin/bash

echo "$args"
echo

scriptArgs=( $args )
echo ${#scriptArgs}
echo ${#scriptArgs[@]}
echo

scriptArgs=( "${args[@]}" )
echo ${#scriptArgs}
echo ${#scriptArgs[@]}
echo

scriptArgs=( "$args" )
echo ${#scriptArgs}
echo ${#scriptArgs[@]}
echo

scriptArgs=( $(echo $args) )
echo ${#scriptArgs}
echo ${#scriptArgs[@]}
echo

scriptArgs=( "$(echo $args)" )
echo ${#scriptArgs}
echo ${#scriptArgs[@]}
echo

# prints:
#
#  "test 1" "test 2" "test 3"
#  
#  5
#  6
#  
#  26
#  1
#  
#  26
#  1
#  
#  5
#  6
#  
#  26
#  1

Желаемое значение - 3.

1 Ответ

2 голосов
/ 12 июля 2020

Вам нужно использовать eval для обработки котировок.

eval "scriptArgs=($args)"
...