Строка внутри строки в оболочке - PullRequest
0 голосов
/ 11 января 2019

Ниже строки пример моего кода

command mycommand /path/location arg1="my valu1" arg2="my value2"

когда я выполняю эту команду путем жесткого кодирования значения аргумента, она работает.

Но когда я использую код ниже:

for i in "$@" do
str+="$i " 
done
command mycommand /path/location $str

where $str="arg1="my valu1" arg2="my value2""

Он не принимает "my value1" как одну строку. Он принимает «my» как одну строку и «value2» как отдельную строку.

Теперь, если я использую

command mycommand /path/location "$str"

затем $ str = "arg1 =" my valu1 "arg2 =" my value2 "" как только одна полная строка. Но я хочу, чтобы команда выполнялась в следующем формате программным способом.

command mycommand /path/location arg1="my valu1" arg2="my value2"

Как это сделать?

Ответы [ 2 ]

0 голосов
/ 11 января 2019

В оболочке, которая поддерживает массивы (например, bash), вы должны использовать массив:

command mycommand /path/location "${arr[@]}"

Если ваша оболочка не поддерживает массивы, вы можете использовать позиционные параметры:

command mycommand /path/location "${@}"

Распространенным хаком является использование set сброса позиционных параметров. То есть вы можете сделать:

set -- "arg one" "arg two"
0 голосов
/ 11 января 2019

Не пытайтесь добавить свои аргументы в строку, просто передайте "$@" вашей фактической команде внутри скрипта:

command mycommand /path/location "$@"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...