Сценарий оболочки - Храните двойные кавычки в середине параметра, не используя \ для выхода - PullRequest
0 голосов
/ 26 сентября 2019

Я пишу сценарий оболочки, чтобы помочь мне работать с собственным реактивным проектом, мой сценарий состоит из следующих частей:

#some steps to create $calculated_value...

os_type=$1
shift
script="$calculated_value react-native run-$os_type $@"
$script

Когда я набираю эту команду в терминале:

./scripts/run ios --simulator="iPhone 6"

Я ожидаю, что сценарий должен выполнить следующую команду в конце:

"$calculated_value" react-native run-ios --simulator="iPhone 6"

Однако сценарии теперь выполняют эту команду:

"$calculated_value" react-native run-ios --simulator=iPhone 6

, двойные кавычки которой исчезли,и терминал только что прочитал симулятор без «6».

Я пытался заменить $@ на $(for i;do echo ${i@Q};done;)
, но он выдает ошибку: line 25: ${i@Q}: bad substitution

Я знаю, что могу добавить \ перед двойными кавычками, чтобы избежать его
, но просто хочу посмотреть, есть ли какие-нибудь решения, которые я могу сделать, чтобы пропустить добавление \.

1 Ответ

0 голосов
/ 27 сентября 2019

Попробуйте исключить промежуточную переменную 'script'

os_type=$1
shift
"$calculated_value" react-native "run-$os_type" "$@"

Кавычки вокруг 'run- $ os_type', а '$ @' будут указывать на правильное расширение параметров с пробелами (или другими «волшебными» символами).: *,?, ...).

Непонятно, каково значение «$ selected_value», ответьте, что это путь к программе (без дополнительных аргументов).Если он может содержать аргументы или параметры, вам, вероятно, придется удалить кавычки вокруг него.

...