0

getoptsスクリプトで onを使用しようとしcygwinていbashます。コードは次のとおりです。

#!/bin/bash

# Sample program to deal with getopts.

echo "Number of input arguments = $#";
i=0;

while [ ${i} -lt 10 ];
do
  i=$[${i}+1];
  echo ${i};
done

while getopts ":a:b:c:e:" opt;
do
  case ${opt} in
  a)
   echo "-a was triggered with argument: ${OPTARG}";
  ;;

  b)
  echo "-b was triggered with argument: ${OPTARG}"
  ;;

  c)
   echo "-c was triggered with argument: $[OPTARG}"
  ;;

  e)
   echo "-e was triggered with argument: ${OPTARG}"
  ;;

  ?)
   echo "Invalid argument: ${OPTARG}"
  ;;
  esac
done

上記のコードを実行すると、次のエラーが発生します。

./getOpts_sample.bash: line 37: syntax error near unexpected token `done'
./getOpts_sample.bash: line 37: `done'  

このエラーの背後にある原因を理解できません。getopts最初のループが機能するのにループが機能しないのはなぜですか? getopts私のシステムがインストールされていないためですか?それを確認するにはどうすればよいですか?

4

1 に答える 1

2

これは cygwin に固有のものではありません。構文エラー行 26 があります。

echo "-c was triggered with argument: $[OPTARG}"

に置き換える[{動作します。

11 行目の注意:echo ${i}間違っていecho ${!i}ます。i 番目の引数を出力するために使用します。

10 行目の注意: この構文$[ ]は廃止されました。(( ))代わりに次のように使用できます。

((i++))

または、さらに良いことに、8 行目から 12 行目を次のように置き換えます。

for ((i=0; i<10; i++)); do echo ${!i}; done
于 2013-03-16T17:49:28.283 に答える