1

オプションの入力引数を取りたい bash スクリプトがあり、その後にファイル名またはワイルドカードを含むファイル仕様が続きます。

スクリプトを実行 getopts_problem.sh -td *.txt すると、現在のディレクトリにある .txt ファイルのリストが出力されます。

ファイルは readme.txt letter_to_editor.txt someotherfile.txt です

getopts_problem.sh -td *.ABC スクリプト出力を実行すると

ファイルは *.ABC

現在のディレクトリに拡張子が「.ABC」のファイルはありません。何らかの理由で、スクリプトは「*.ABC」をファイル名として解釈します。「*.ABC」を実際のファイル名ではなく、展開するファイル名式としてスクリプトに認識させるにはどうすればよいですか? コードは次のとおりです。

# !/bin/sh
doDry=0
doTimestamp=0

while getopts ":dt" OPT;
do
   case $OPT in
      d ) doDry=1 ;;
      t ) doTimestamp=1 ;;
      ? ) echo 'Bad options used. '
          exit 1 ;;
    esac
done

shift $(($OPTIND - 1))
fileList=$@

for file in "$fileList"
do
  echo file is $file
done

exit 0
4

1 に答える 1

2

ワイルドカードパターンはbash、スクリプトを実行する前に展開されます。スクリプトを解釈するシェルではなく、スクリプトを実行するシェルです。そして、それがパターンを維持するか、何も通過しないか、失敗するかは、、nullglobおよびfailglobいくつかのそのようなオプションに依存します(を参照man bash)。

また、引用符で変数を展開しないfor file in "$fileList"ようにシェルに明示的に指示します。

于 2012-01-26T19:43:18.463 に答える