Unix: Почему я получаю "целочисленное выражение"? - PullRequest
1 голос
/ 15 декабря 2010
for arg; do
        [ -f "$arg" ] && x=1 && continue                                                                                                                                       
        echo "Not a File" >&2
done

[ "$x" -eq 0 ] && echo "No valid files"

Я получаю эту ошибку: [: : integer expression expected

Что с этим не так? Цикл for работает в отдельном процессе или как-то еще?

Ответы [ 2 ]

4 голосов
/ 15 декабря 2010

Возможно, потому что 'x' не установлено, поэтому сравнение проводится между пустой строкой, преобразованной в целое число и ноль.Это не радует пустую строку.

Чтобы исправить

x=0
...loop as now...
[ $x -eq 0 ] ...

Это имеет полезный побочный эффект - уменьшение количества способов, которыми ваш код может сломаться, если кто-то экспортирует переменную среды.'х'.

2 голосов
/ 15 декабря 2010

В Bash используйте:

(( x == 0 )) && echo "No valid files"

В оболочках POSIX:

[ ${x:-0} -eq 0 ] && echo "No valid files"

или инициализируйте вашу переменную, как показывает Джонатан.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...