Есть ли простой способ передать (получить) именованные параметры в сценарий оболочки?
Например,
my_script -p_out '/some/path' -arg_1 '5'
А внутри my_script.sh
принимают их как:
# I believe this notation does not work, but is there anything close to it?
p_out=$ARGUMENTS['p_out']
arg1=$ARGUMENTS['arg_1']
printf "The Argument p_out is %s" "$p_out"
printf "The Argument arg_1 is %s" "$arg1"
Это возможно в Bash или Zsh?
bash
shell-script
zsh
arguments
Амелио Васкес-Рейна
источник
источник
Ответы:
Вероятно, ближайший к этому синтаксис:
источник
-k
опция установлена в вызывающей оболочке, тоmy_script p_out='/some/path' arg_1='5'
имеет тот же эффект. (Все аргументы в форме назначения добавляются в среду, а не только в те назначения, которые предшествуют команде.)x=42 echo $x; echo $x
что означает, что при следующем выполненииmy_script
, еслиp_out
оно опущено, оно будет придерживаться значения, переданного в последний раз !! ('/some/path'
)unset
их после первого выполнения, сбросьте их до следующего выполнения?x=42 echo $x
даже не выводит ничего, если$x
не было определено ранее.Если вы не возражаете ограничиться однобуквенными именами аргументов, т.
my_script -p '/some/path' -a5
Е. В bash вы можете использовать встроенныеgetopts
, например,Тогда вы можете сделать
Существует полезное руководство для небольших getopts, или вы можете ввести его
help getopts
в командной строке.источник
i
иd
). Когда я запускаю его,my_script -i asd -d asd
я получаю пустую строку дляd
аргумента. Когда я запускаю его,my_script -d asd -i asd
я получаю пустую строку для обоих аргументов.Я украл это на drupal.org , но вы могли бы сделать что-то вроде этого:
Единственное предостережение в том, что вы должны использовать синтаксис
my_script --p_out=/some/path --arg_1=5
.источник
-c|--condition)
Я использую этот скрипт и работает как шарм:
использование
Консольный результат:
STEPS и REPOSITORY_NAME готовы к использованию в сценарии.
Неважно, в каком порядке находятся аргументы.
источник
С помощью
zsh
вы бы использовалиzparseopts
:Но вы бы назвали сценарий с
myscript --p_out foo
.Обратите внимание, что
zparseopts
не поддерживается сокращение длинных опций или--p_out=foo
синтаксиса, как в GNUgetopt(3)
.источник
[]
2 это тире? Не имеет смысла!info zsh zparseopts
ПодробностиЯ только что придумал этот скрипт
передать его как
my_script --p_out /some/path --arg_1 5
и затем в сценарии, который вы можете использовать$arg_1
и$p_out
.источник
v=``echo ${1} | awk '{print substr($1,3)}'`` typeset $v="$2"
(Удалить одну обратные одиночные кавычки с каждой стороны)Если функция или приложение имеет больше нуля аргументов, у них всегда есть последний аргумент.
Если вы хотите прочитать опцию флага и пары значений, как в:
$ ./t.sh -o output -i input -l last
И вы хотите принять переменное количество пар опция / значение,
И не хочу огромное "если .. тогда .. еще .. фи" дерево,
Затем, после проверки количества аргументов, отличных от нуля и четного,
Напишите цикл while с этими четырьмя операторами eval в качестве тела, за которым следует оператор case, использующий два значения, определенные в каждом проходе цикла.
Сложная часть сценария демонстрируется здесь:
источник
вы только что ввели параметры командной строки в область действия скрипта !!
источник
-a 1 -b mitsos -c karamitsos