これは私のコードです。
if [ -f /Applications/xml[0-9].pl ]
また、二重括弧を使ってみましたが、-f =~
どちらも機能しないようです。
最初は正規表現に問題があると思いましたが、これを試してみました。
echo h1 | sed 's/h[0-9]/h/'
これは効果がありました。私がここで何を間違っているのか?
答え1
ファイルをテストするために、このような正規表現やglobを使用することはできません。ファイルを繰り返す必要があります。
for file in /Applications/xml[0-9].pl; do if [ -f "$file" ]; then ...
答え2
bash は条件を評価する前に正規表現を拡張します。ディレクトリに次の3つのファイルが含まれている場合
/Applications/xml0.pl
/Applications/xml1.pl
/Applications/xml2.pl
あなたのif
声明は次のとおりです
if [ -f /Applications/xml0.pl /Applications/xml1.pl /Applications/xml2.pl ]]
これは文法的に正しくありません。次のコマンドを使用してファイルが存在することを確認するには、ファイル名を完全に指定する必要があります。
for file in /Applications/xml[0-9].pl
do
if [ -f ${file} ]
または、可能であれば、そのfind
コマンドを使用してファイルに対して必要な操作を実行します。