Ответы пользователя по тегу Командная строка
  • Как на bash'е организовать разбор аргументов и ключей?

    delch
    @delch Автор вопроса
    Frontend developer
    Я в общем наворотил такой ад:
    for val in $@
    do
    	loopIndex=$[loopIndex+1]
    	if [ ! ${val:0:1} = "-" ]; then
    		result=${args[$loopIndex]}
    		arguments+=$result
    	else
    		echo "не соответствие"
    	fi
    done

    Это я пытаюсь получить все аргументы скрипта, но при вызове в таком виде ./bedi.sh -r header footer
    у меня echo $arguments выводит headerfooter слитно, словно это строка, хотя в самом начале я объявляю переменную arguments=()

    В закрамах нашел такой вариант разбора аргументов и параметров
    #!/bin/bash
    
    showopts () {
      while getopts ":pq:" optname
        do
          case "$optname" in
            "p")
              echo "Option $optname is specified"
              ;;
            "q")
              echo "Option $optname has value $OPTARG"
              ;;
            "?")
              echo "Unknown option $OPTARG"
              ;;
            ":")
              echo "No argument value for option $OPTARG"
              ;;
            *)
            # Should not occur
              echo "Unknown error while processing options"
              ;;
          esac
        done
      return $OPTIND
    }
    
    showargs () {
      for p in "$@"
        do
          echo "[$p]"
        done
    }
    
    optinfo=$(showopts "$@")
    argstart=$?
    arginfo=$(showargs "${@:$argstart}")
    echo "Arguments are:"
    echo "$arginfo"
    echo "Options are:"
    echo "$optinfo"

    Но он явно делает не массивы, а мне нужны массивы(
    Ответ написан