bash не может найти закрывающую скобку?

Вот что я считаю полезным (в Debian 9):

c() {
    cd "${@}" \
    && ls --color=always -C \
    | sed '
        # on line 5, print the line,
        5 {
            # append an ellipsis
            a[...]
            # and quit
            q
        }
        # print lines 1-4 verbatim
    '
}

Это дает мне усеченный вывод с многоточием на случай, если в этом каталоге слишком много элементов, чтобы консоль оставалась чистой:

$ c data/git/buildroot/package/
4th                              lua-markdown
a10disp                          lua-messagepack
acl                              lua-msgpack-native
acpica                           luaossl
acpid                            lua-periphery
[...]
$ ls -1 | wc --lines
1977
1
08.02.2021, 13:58
1 ответ

Синтаксис для двух стандартных тестов с &&в -между ними:

[ expression_1 ] && [ expression_2 ]

или, используя устаревшую -aопцию(не делайте этого ),

[ expression_1 -a expression_2 ]

В вашем случае, например,

if [   -f "$DBBACKUP.prev" ] &&
   [ ! -f "$ERRFILE"       ]
then
    mv "$DBBACKUP" "$DBBACKUP.prev"
fi

С bashвы можете использовать &&так же, как и раньше, но только с нестандартным -тестом [[... ]]:

.
[[ expression_1 && expression_2 ]]

, что также можно записать как

[[ expression_1 ]] && [[ expression_2 ]]

За исключением специального [[... ]], &&является оператором оболочки, который разделяет две команды , при этом вторая выполняется только в случае успеха первой. Итак, по команде:

[ expression_1 && expression_2 ]

Оболочка запускается первой [ expression_1, в которой отсутствует конечный ], отсюда и ошибка.

См. также:

  • Спецификация POSIX для testи [.
  • man testи/или man [дает вам руководство для внешних команд testи [. В большинстве оболочек эти команды встроены -, но семантика должна быть одинаковой, хотя некоторые конкретные тестовые операторы могут отличаться (могут быть реализованы не -стандартные операторы ).
  • help [, help testи help [[в оболочке bashпоказывают краткое описание этих встроенных -команд в оболочке bash. Дополнительную информацию о встроенных -модулях bashоболочки см. в руководстве bash(man bash).
15
18.03.2021, 22:31

Теги

Похожие вопросы