質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Q&A

解決済

1回答

272閲覧

bash オプションのパースがうまくいかない

igar

総合スコア110

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

0グッド

0クリップ

投稿2018/08/25 01:08

こちらExample of how to parse options with bash/getoptを参考にオプションのパースをしたのですが、出力が想像していたとおりに出力されません。

$DATANAME-dオプションで値を入れたいのですが、値を定義していても無視されてしまいます。--modeオプションの方は同じコードで動いているのですが…。
何が原因が分かりますでしょうか?

#!/bin/sh OPTS=`getopt -o uhadm: --long mode,data_name,add-data,update-data,help: -n 'parse-options' -- "$@"` if [ $? != 0 ] ; then echo "Failed parsing options." >&2 ; exit 1 ; fi DATANAME="_dafault" MODE="update" while true; do case "$1" in -h | --help ) echo "databak -m [update|add] -d [dataname]"; shift ;; -m | --mode ) MODE="$2"; shift ;; -d | --data_name ) DATANAME="$2"; shift; shift ;; -- ) shift; break ;; * ) break ;; esac done echo $DATANAME echo $MODE

出力

# tes -m add -d hoge _dafault add

想定していた出力

# tes -m add -d hoge hoge add

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

-mオプションと--modeオプションの処理は、そのオプションとそのオプション引数の二つを処理しているので、shiftを二つにしてください。

投稿2018/08/25 01:37

fu7mu4

総合スコア1088

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問