Как лучше использовать именованные аргументы командной строки в Bash Scripting?

Это мой образец Bash Script 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?


person GDroid    schedule 31.05.2018    source источник


Ответы (1)


Вы можете просто использовать переменные среды:

#!/bin/bash

echo "$arg1"
echo "$arg2"

Разбор не нужен. Из командной строки:

$ arg1=foo arg2=bar ./example.sh
foo
bar

Есть даже опция оболочки, позволяющая размещать присваивания где угодно, а не только перед командой:

$ set -k
$ ./example.sh arg1=hello arg2=world
hello
world
person chepner    schedule 31.05.2018
comment
Для чего установлен -k? Мне нравится это решение, но это обязательно сделать перед запуском аргументов передачи сценария bash. Что-нибудь, чтобы справиться с этим автоматически? - person GDroid; 01.06.2018
comment
Нет, потому что его должна поддерживать вызывающая оболочка. - person chepner; 01.06.2018