以下のコードでは
#!/bin/bash
sDir=/a/b/c
dDir=/d/e/f
rDir="$dDir/recent"
shopt -s nullglob
:
rm $rDir/$deviceName*
:
問題行に rm $rDir/$deviceName*
オペランドが欠落しており、エコーコマンドが表示されない
rm: missing operand
Try 'rm --help' for more information.
このエラーを解決するには?
答え1
があるため、globパターンが何も一致しないときにshopt -s nullglob
コマンドがrm $rDir/$deviceName*
拡張されます。rm
実際にrm
パラメータなしで呼び出すと、次のメッセージが表示されます。
$ rm
rm: missing operand
Try `rm --help' for more information.
次の2つを比較します。
$ rm nonexistent*
rm: cannot remove `nonexistent*': No such file or directory
$ (shopt -s nullglob; rm nonexistent*)
rm: missing operand
Try `rm --help' for more information.
欠落している引数に起因するエラーを排除する簡単で安全ではない方法は、rm
引数を呼び出すことですrm -f
。
次のような状況が発生しないようにすることをお勧めしますrm
。未設定の変数で構成された引数を使用して最初に呼び出すと、未設定の変数をset -o nounset
使用することは禁止されます(ただし、空の文字列に設定された変数には何もしません)。両方の変数を設定しないか空白のままにするrm $x/$y*
と、パラメータはになります。/*
つまり、すべてのファイルがルートディレクトリに直接配置されます。