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을 실행하는 것을 방지합니다. 파일 하나만 패치해야 하는 경우 따옴표를 제거하면 됩니다. 그렇지 않으면 확장자에서 여러 파일 이름을 처리하도록 스크립트를 수정해야 합니다.

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

두 개의 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에 문제가 있다고 생각합니다. 올바르게 에코할 수 없고 수동으로 다시 작성하는 것이 도움이 되기 때문입니다.

관련 정보