1

最初の位置引数としてファイル名を取り、その後にオプション(./test.sh <file> [options])を付けるシェルスクリプトが必要です。ただし、オプションの前に位置引数を指定すると、getoptsは機能しません。私は次のコードを持っています:

while getopts "h" opt; do
  case $opt in
    h) 
      echo usage
      ;;
      ;;
  esac
done

echo $1

./test.sh -husageシェルに印刷しますが、シェルに./test.sh test -h印刷testします。したがって、オプションの前に位置引数を指定すると、そのオプションでは何も実行されません。オプションの後に位置引数がある場合は機能します(に変更echo $1してからecho $BASH_ARGVを呼び出します./test.sh -h test)。オプションの前に位置引数を設定するにはどうすればよいですか?

4

2 に答える 2

1

シェルビルトインのgetoptsは、パラメーターの並べ替えをサポートしていません。パラメータの並べ替えが必要な場合は、拡張されたgetoptバリアントの1つ(gnugetoptやbsdgetoptなど)を使用する必要があります。デフォルトのbsdgetoptは長いオプションをサポートしていないことに注意してください(Mac OS Xで使用する場合など)

于 2012-06-14T13:20:51.190 に答える
1

「h」をhに置き換えてみてください

while getopts h opt; do...

また、あなたの場合はマイナスを追加する必要があります

case "$opt" in
 -h)...

あなたの[ファイル]が常に存在することを知っているなら、あなたはただ使うことができますか

filename="$1"
shift

そして、他の引数を解析するよりも

于 2012-06-14T10:26:57.560 に答える