Bash || if []; 块

Gle*_*rry 0 bash file

我有代码匹配:

if [ $LAST_MODIFIED -lt 3600 || ! -f "$i" ]; then
    wget $WGET_OPTS $BASE$i
    LAST_MODIFIED=`echo "\`date +%s\` - \`stat -c %Y $i\`" | bc`
    if [ $LAST_MODIFIED -lt 500 ]; then
        $FILES_MODIFIED++
    fi
fi
Run Code Online (Sandbox Code Playgroud)

$i 通过定义

for i in `/bin/grep ".gz" index.html | awk -F\" '{print $2}'`
Run Code Online (Sandbox Code Playgroud)

但是,bash告诉我

[: missing `]'
Run Code Online (Sandbox Code Playgroud)

-f: command not found

为什么?

Mar*_*ers 9

您应该使用[[ ... ]]而不是代替[ ... ]或使用-o代替||.

if [[ $LAST_MODIFIED -lt 3600 || ! -f "$i" ]]; then
Run Code Online (Sandbox Code Playgroud)

要么:

if [ $LAST_MODIFIED -lt 3600 -o ! -f "$i" ]; then
Run Code Online (Sandbox Code Playgroud)

请参见:http://www.ibm.com/developerworks/library/l-bash-test.html