0

私の Bash-Script は、引数とオプションを受け入れる必要があります。さらに、引数とオプションは別のスクリプトに渡す必要があります。

私が解決した2番目の部分:

for argument in "$@"; do
    options $argument
done

another_script $ox $arguments

function options {
  case "$1" in
    -x) selection=1
    -y) selection=2
    -h|--help) help_message;;
    -*) ox="$ox $1";;
    *) arguments="$arguments $1";;
  esac
}

ユーザーがテキストを指定できる引数「-t」を実装する方法がわかりません

次のようになります。

function options {
      case "$1" in
        -t) user_text=[ENTERED TEXT FOR OPTION T]
        -x) selection=1
        -y) selection=2
        -h|--help) help_message;;
        -*) ox="$ox $1";;
        *) arguments="$arguments $1";;
      esac
    }
4

3 に答える 3

3

getoptsこれに使用できます

while getopts :t:xyh opt; do
    case "$opt" in
    t) user_text=$OPTARG ;;
    x) selection=1 ;;
    y) selection=2 ;;
    h) help_message ;;
    \?) commands="$commands $OPTARG" ;;
    esac
done

shift $((OPTIND - 1))

残りの引数は"$@"

于 2013-03-08T22:03:49.713 に答える
2

あなたの問題は、オプションが引数を取ることができる場合、引数を単語ごとに処理するだけでは十分ではないということです。options関数を提供するよりも多くのコンテキストが必要です。options次のように、ループを の中に入れます。

function options {
    while (( $# > 0 )); do
        case "$1" in
            -t) user_text=$2; shift; ;;
            -x) selection=1 ;;
            # ...
        esac
        shift
    done
}

options次に、引数リスト全体を呼び出します。

options "$@"

getopts組み込みコマンドまたはgetoptプログラムを確認することもできます。

于 2013-03-08T22:01:45.393 に答える
0

2 番目の次の引数に強制的にシフトできるように、for ループ内で case ステートメントを実行します。何かのようなもの:

while true
do
  case "$1" in
    -t) shift; user_text="$1";;
    -x) selection=1;;
...
  esac
  shift
done
于 2013-03-08T22:09:29.690 に答える