Какой самый простой способ «вырезать» определенные аргументы, переданные в скрипт bash?

Какой самый простой способ «вырезать» определенные аргументы, переданные в скрипт bash?

У меня есть два сценария: aaa и bbb.

Каждый скрипт имеет некоторые аргументы. Аргумент может быть строкой, числом или иметь формат типа --some-action или типа --name=foo.

Скрипт aaa выполняет скрипт bbb. Некоторые аргументы для bbb сгенерированы в aaa, но некоторые аргументы я могу вручную добавить из выполнения скрипта aaa, например:

$ aaa "arguments for aaa" "arguments for bbb"

Я не могу передать bbb все аргументы aaa, потому что bbb контролирует неизвестные аргументы.

Я не знаю, как извлечь "аргументы для bbb" в скрипте aaa. Может ли кто-нибудь мне помочь?

Итак, я хочу выполнить в aaa:

bbb "some arguments from aaa" "arguments for bbb"

решение1

Вы можете проанализировать все аргументы в aaaскрипте с помощьюgetoptа затем при необходимости передайте их в свой сценарий.

Я поправилпример:

#!/bin/bash

OPTS=`getopt -o abcdef -l argument-for-both: -- "$@"`
if [ $? != 0 ]
then
    exit 1
fi

eval set -- "$OPTS"

while true ; do
    case "$1" in
        -a) OPT_a=true; shift;;
        -d) ARG_B="$ARG_B -b"; shift;;
        --argument-for-both)
            OPT_argument_for_both=true
            ARG_B="$ARG_B --argument-for-both"
            shift;;
    esac
done

# aaa
if [[ $OPT_a ]] ; then do_something ; fi
if [[ $OPT_argument_for_both ]] ; then do_something_else ; fi

# bbb
bbb $ARG_B

Связанный контент