Это мой образец Bash скриптexample.sh:
#!/bin/bash
# Reading arguments and mapping to respective variables
while [ $# -gt 0 ]; do
if [[ $1 == *"--"* ]]; then
v = "${1/--/}"
declare $v
fi
shift
done
# Printing command line arguments through the mapped variables
echo ${arg1}
echo ${arg2}
Теперь, если в терминале я запускаю сценарий bash следующим образом:
$ bash ./example.sh "--arg1=value1" "--arg2=value2"
Я получаю правильный результат, например:
value1
value2
Идеально! Это означает, что я смог использовать значения, переданные аргументам --arg1 и --arg2, используя переменные $ {arg1} и $ {arg2} внутри сценария bash.
Я доволен этим решением, поскольку оно служит моей цели, но кто-нибудь может предложить лучшее решение для использования именованных аргументов командной строки в сценариях bash?





Вы можете просто использовать переменные среды:
#!/bin/bash
echo "$arg1"
echo "$arg2"
Разбор не требуется. Из командной строки:
$ arg1=foo arg2=bar ./example.sh
foo
bar
Есть даже опция оболочки, позволяющая размещать назначения где угодно, а не только перед командой:
$ set -k
$ ./example.sh arg1=hello arg2=world
hello
world
Нет, потому что это должна поддерживать оболочка звонящий.
Для чего нужен "set -k"? Мне нравится это решение, но это обязательно сделать перед запуском сценария bash, передающего аргументы. Что-нибудь, чтобы справиться с этим автоматически?