Bashで変数とglob($ var *)を使用する方法

Bashで変数とglob($ var *)を使用する方法

私のスクリプトに問題があります。

これはコードです

#!/bin/bash

date=`date +"%m-%d-%y"`

dokuwiki="dokuwiki.$date*.toolbox.admin.tar.gz"

if test -e  $dokuwiki
then
echo "works"
else
echo "shits broken yo"
fi

私の問題は奇妙なファイルが見つからないと思います。

ファイルは次のようになります。

dokuwiki.09-12-14-06-00.toolbox.admin.tar.gz

乾杯

答え1

引用符は、*がファイルを一致させるためにglobを実行するのを防ぎます。ファイルを1つだけパッチする必要がある場合は、引用符を削除してください。それ以外の場合は、拡張子が複数のファイル名を処理するようにスクリプトを変更する必要があります。

for filename in $dokuwiki; do
    # do something with $filename
done

答え2

問題は、アスタリスク(*)拡張がbashによって実行されることです。

doku*ファイルに付属しています。

mybox $ touch dokuwiki.09-12-14-06-00.toolbox.admin.tar.gz
mybox $ date=`date +"%m-%d-%y"`
mybox $ echo $date
09-12-14
mybox $ dokuwiki="dokuwiki.$date*.toolbox.admin.tar.gz"
mybox $ echo $dokuwiki
dokuwiki.09-12-14-06-00.toolbox.admin.tar.gz
mybox $ test -e $dokuwiki ; echo $?
0

2つのdocu *ファイルがあります

mybox $ touch dokuwiki.09-12-14-05-00.toolbox.admin.tar.gz
mybox $ test -e $dokuwiki ; echo $?
-bash: test: dokuwiki.09-12-14-06-00.toolbox.admin.tar.gz: binary operator expected
2

この行はtest -e doku*に展開されますtest -e doku-1 doku2

使いたいかもしれません

if ls $dokuwiki > /dev/null  2>&1 
then
   ...

テスト部分として。

答え3

このような場合に存在感を使うと

if [ -e $docuwiki ]
then
    echo "works"
else
    echo "broken"
fi

動作します。以下で説明するように、ifステートメントは同じです。質問を再度コピーした後、これは実際に変数docuwikiに問題があると思います。正しくエコーできず、手動で書き直すのが役に立つからです。

関連情報