Я пишу bash-скрипт foo.sh который тоже запускает bar команд с первым входным аргументом, а baz со вторым аргументом:

#! /bin/bash
bar "$1"
baz "$2"

Теперь я хочу сделать foo.sh более гибким, имея необязательное количество аргументов для bar и baz , что-то вроде следующего:

./foo.sh bar_args="-x -v message=hello" baz_args="-d -m"

И я хочу, чтобы foo.sh передавал bar_args в качестве входных аргументов в bar , а baz_args в baz . Я также хочу, чтобы foo.sh работал нормально, если ни один из аргументов не был указан (например, если bar_args не указан , bar следует вызывать без каких-либо аргументов).

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

1 ответ1

1

Вы можете сделать это, но это немного хрупко

foo.sh будет выглядеть так

#! /bin/bash
declare "$@"       # evaluate the params as variable declarations
bar $bar_args      # not quoted!
baz $baz_args      # not quoted!

Тогда ./foo.sh bar_args="-x -v message=hello" baz_args="-d -m" будет работать так, как вы надеетесь.

Не пытайтесь передать сообщение с пробелами в нем, это невозможно сделать таким образом.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .