У меня есть сценарий оболочки, который выполняется, exec
чтобы заменить себя другой командой. Другая команда принимает некоторые необязательные аргументы.
exec mycommand $ARG1 $ARG2 $ARG3
Любой из этих аргументов может быть заполнен или не заполнен. Если они не заполнены, они не отображаются в качестве аргумента функции. Например:
# if you have:
ARG1=foo
ARG3=bar
exec mycommand $ARG1 $ARG2 $ARG3
# then you get:
exec mycommand foo bar
Однако я хочу, чтобы в значениях этих аргументов пробелы были допустимыми, и чтобы они не приводили к дополнительным аргументам. Это,
# if you have
ARG1="foo bar baz"
ARG2="qux"
exec mycommand $ARG1 $ARG2 $ARG3
# then I want:
exec mycommand "foo bar baz" qux
# not:
exec mycommand foo bar baz qux
Я попытался поместить в аргументы экранированные кавычки, но exec ожидал, что они будут буквально частью значения.
ARG1="\"foo bar baz\""
exec mycommand $ARG1 $ARG2 $ARG3
# gives you:
exec mycommand \"foo bar baz\"
Я также попытался заключить в кавычки переменные в exec, но затем он начал передавать пустые строки, когда аргументов не было:
ARG2="foo bar"
exec mycommand "$ARG1" "$ARG2" "$ARG3"
# gives you:
exec mycommand "" "foo bar" ""
Есть ли лучший способ создать команду и передать ее в exec? Есть ли другой способ заменить текущий процесс другим?